Given a sorted integer array without duplicates, return the summary of its ranges.
Example 1:
Input: [0,1,2,4,5,7]
Output: [“0->2″,”4->5″,”7”]
Example 2:
Input: [0,2,3,4,6,8,9]
Output: [“0″,”2->4″,”6″,”8->9”]
思路:
关键点是确定何时加入一个新的区间,我们需要判断当前元素是否比它的前一个元素大1。
如果当前元素比前一个元素大1,更新区间最大元素;否则,判断区间起始元素和最大元素是否相等,来决定新增区间是一个数字还是a->b。
对于数组中最后一个元素,需要左一次插入区间的特殊处理。
public List<String> summaryRanges(int[] nums) {
List<String> res = new ArrayList<>();
if (nums == null || nums.length == 0) {
return res;
}
if (nums.length == 1) {
res.add(String.valueOf(nums[0]));
return res;
}
//define variable
int pre = nums[0], start = nums[0], end = nums[0];
for (int i = 1; i < nums.length; i++) {
if (nums[i] == pre + 1) {
end = nums[i];
}
if (nums[i] != pre + 1) {
if (start == end) {
res.add(String.valueOf(start));
} else {
res.add(String.valueOf(start) + "->" + String.valueOf(end));
}
start = nums[i];
end = nums[i];
}
if (i == nums.length - 1) {
if (start == end) {
res.add(String.valueOf(start));
} else {
res.add(String.valueOf(start) + "->" + String.valueOf(end));
}
}
pre = nums[i];
}
return res;
}