228. 汇总区间
2018-11-25 本文已影响0人
calm_peng
给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 1:
输入: [0,1,2,4,5,7]
输出: ["0->2","4->5","7"]
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。
示例 2:
输入: [0,2,3,4,6,8,9]
输出: ["0","2->4","6","8->9"]
解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。
分析:创建两个值 start end 来表示每次的连续的区间 i每次++
判断 nums[i] == nums[i+1] -1 是否成立 来判断是否 加入区间
这样 由前往后的 遍历会有一个问题。最后一个不会到 最后一个值与倒数第二值连续时 逻辑上没有覆盖!!导致错误。
两种改法 在最后一个后面 加入一个 前面不等的值
或者 if{} 中加条件 判断
*/
class Solution {
public List<String> summaryRanges(int[] nums) {
int i = 0 ,end = 0,start = 0;
List<String> result = new ArrayList<>();
int[] nums1 = new int[nums.length+1];
for(int k = 0;k<nums.length;k++){
nums1[k] = nums[k];
}
//nums1 = nums.clone();
nums1[nums.length] = -1;
//nums = nums1;
while(i<nums1.length-1 && end<nums1.length){
if(nums1[i] == nums1[i+1]-1){
end++;
}else{
pushList(result ,nums1,start,end);
end = end + 1;
start = end;
}
i++;
}
return result;
}
public static void pushList(List<String> result,int[] nums1,int start,int end){
if(start == end){
String s = ""+nums1[start];
result.add(s);
}else{
String s = nums1[start]+"->"+nums1[end];
result.add(s);
}
}
}