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"]
思路:
關(guān)鍵點(diǎn)是確定何時(shí)加入一個(gè)新的區(qū)間凛辣,我們需要判斷當(dāng)前元素是否比它的前一個(gè)元素大1马篮。
如果當(dāng)前元素比前一個(gè)元素大1攻走,更新區(qū)間最大元素喧笔;否則舷礼,判斷區(qū)間起始元素和最大元素是否相等欠痴,來(lái)決定新增區(qū)間是一個(gè)數(shù)字還是a->b。
對(duì)于數(shù)組中最后一個(gè)元素瞳筏,需要左一次插入?yún)^(qū)間的特殊處理。
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;
}