228题 汇总区间
思路: 双指针i,j,i初始为0,j初始为1.当j指向位置一直比j-1位置大1时,j向右移,直到不满足条件时,将i到j-1区间值加到列表。再将i指向j,j指向j+1。最后判断最后一个数是否和倒数第二个数连续,不连续的话单独将最后一个数加入列表。
时间复杂度分析: O(n)
class Solution {
void addToList(List<String> list,int i,int j){
if(i==j){
list.add(i+"");
}else if(i<j){
list.add(i+"->"+j);
}
}
public List<String> summaryRanges(int[] nums) {
List<String> list=new ArrayList<>();
if(nums.length==0){
return list;
}
else if(nums.length==1){
addToList(list,nums[0],nums[0]);
return list;
}
int i=0;
int j=1;
while(j<nums.length && i<j){
while(j<nums.length && nums[j]-nums[j-1]==1){
j++;
}
addToList(list,nums[i],nums[j-1]);
i=j;
j=i+1;
}
if(nums[nums.length-1]-nums[nums.length-2]!=1){
addToList(list,nums[nums.length-1],nums[nums.length-1]);
}
return list;
}
}