228. 汇总区间
题目:
思路:
【1】正常遍历合并即可
代码展示:
//时间6 ms 击败 42.95% //内存40.1 MB 击败 6.36% //时间复杂度:O(n),其中 n 为数组的长度。 //空间复杂度:O(1)。除了用于输出的空间外,额外使用的空间为常数。 //为了避免数据溢出导致问题故判断采用 tem > (end + 1) , //而非 tem - end > 1 , 因为正减负(本应该是正数),由于溢出而变为负会导致结果不正确 class Solution { public List<String> summaryRanges(int[] nums) { ArrayList<String> res = new ArrayList<>(); if (nums.length == 0) return res; int start = nums[0], end = nums[0]; for (int i = 1; i < nums.length; i++){ int tem = nums[i]; if (tem > (end + 1)){ if (start == end) res.add(start+""); else res.add(start+"->"+end); // 进行重置区间 start = tem; end = tem; }else { end++; } } // 当遍历完数组的时候要进行处理 if (start == end) res.add(start+""); else res.add(start+"->"+end); return res; } } //时间0 ms 击败 100% //内存39.5 MB 击败 88.45% class Solution { public List<String> summaryRanges(int[] nums) { List<String> ans = new ArrayList<>(); int i=0; for (int j = 0; j < nums.length; j++) { if(j+1 == nums.length || nums[j+1] != nums[j]+1){ StringBuilder sb = new StringBuilder(); sb.append(nums[i]); if(j!=i){ sb.append("->").append(nums[j]); } ans.add(sb.toString()); i = j+1; } } return ans; } }