算法练习——汇总区间

2021年1月10日LeetCode每日一题为228. 汇总区间,难度为简单,这道题确实简单,只需要遍历一遍数组然后按照条件进行收录汇总即可,考虑好边界基本上都是能通过的。简单的从第一个元素开始遍历,每次与后一位元素比较是否为相邻数字,题设已经说明了是有序数组,因此不需要担心其他问题,无脑比较,若是相邻数字,则继续下一轮循环,否则判断上一个顺序开始的下标到当前下标是否超过两个数字,超过两个数字则以x->x的形式汇总,不超过就是数字本身。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public List<String> summaryRanges(int[] nums) {
int left = 0;
List<String> ret = new ArrayList<String>();
for (int i = 0; i < nums.length; i++) {
if (i + 1 == nums.length || nums[i + 1] != nums[i] + 1) {
if (i - left > 0) {
ret.add(nums[left] + "->" + nums[i]);
} else {
ret.add(String.valueOf(nums[i]));
}
left = i + 1;
}
}
return ret;
}
}

这道题实在是简单,题解中的解答也都是差不多的解法,在我的代码中,使用了双层if,导致了性能有所下降,这里附上官方题解