题目描述:
给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 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)使用双指针确定连续的区间,注意处理最后一个元素是单个元素的情形即可;
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
if(nums.empty()){
return {};
}
//标识区间的左右边界
int left=0;
int right=1;
vector<string> res;
while(right<nums.size()){
//找连续区间
while(right<nums.size()&&nums[right]==nums[right-1]+1){
++right;
}
//若区间是一个元素
if(right==left+1){
res.push_back(to_string(nums[left]));
}
else{//区间元素数量大于1个
res.push_back(to_string(nums[left])+"->"+to_string(nums[right-1]));
}
left=right++;//调整区间
}
//处理最后一个元素单独成为一个区间的情形
if(left==nums.size()-1){
res.push_back(to_string(nums[left]));
}
return res;
}
};