来源Leetcode第228题汇总区间
给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 1:
1 | 输入: [0,1,2,4,5,7] |
双指针
用两个指针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;
}