题目
难度:中等
给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 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 可组成一个连续的区间。
解题思路
- 分两种情况,第一种是区间范围只有1个值,第二种是区间范围大于1
- 根据这两种情况分别处理,当当前值与下一个值差值为1的时候,说明区间范围大于1,此时改变start和end指针的值分别指向区间的下限和上限。
- 当区间不连续时,该区间断开,重置start和end指针的值。
代码
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> res;
int start = -1, end = -1;
for(int i = 0; i < nums.size(); i++){
if(i < nums.size() - 1 && nums[i] + 1 == nums[i + 1]){
if(start == -1) start = nums[i];
end = nums[i];
}else{
if(start == -1) res.push_back(to_string(nums[i]));
else res.push_back(to_string(start) + "->" + to_string(end + 1));
start = -1;
end = -1;
}
}
return res;
}
};