Nameless Site

But one day, you will stand before its decrepit gate,without really knowing why.

0%

汇总区间

来源Leetcode第228题汇总区间

给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

示例 1:

1
2
3
输入: [0,1,2,4,5,7]
输出: ["0->2","4->5","7"]
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。

双指针

用两个指针i,j,分别初始化为0,1,利用尾指针j一直向前寻找满足nums[j] - nums[j - 1] == 1的位置,当i,j之差≥2时,说明产生了区间合并,这时将nums[j - 1]加入String中即可。最后在结束时还要判断一下指针i的位置,如果在最尾,说明最后一个独立的不连续的元素没有添加。

    public List<String> summaryRanges(int[] nums) {
        List<String> ans = new ArrayList<>();
        if(nums.length == 0 || nums == null)
            return ans;
        int i = 0 , j = 1;
        while(j < nums.length){
            while (j < nums.length && nums[j] - nums[j - 1] == 1){
                j++;
            }
            String tmp = "" + nums[i];
            if(j - i >= 2)
                tmp += "->" + nums[j - 1];
            ans.add(tmp);
            i = j;
            j = i + 1;
        }
        if(i == nums.length - 1){
            String tmp = "" + nums[i];
            ans.add(tmp);
        }
        return ans;
    }