给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 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 可组成一个连续的区间。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> vecRes;
if(nums.size() == 0)
return vecRes;
int startIndex = 0;
int endIndex = 0;
for(int i = 1; i < nums.size(); i++)
{
if(nums[i] == nums[i-1]+1)
{
endIndex = i;
}
else
{
if(startIndex == endIndex)
{
vecRes.push_back(to_string(nums[startIndex]));
}
else
{
string str = to_string(nums[startIndex]) + "->" + to_string(nums[endIndex]);
vecRes.push_back(str);
}
startIndex = i;
endIndex = i;
}
}
if(startIndex != endIndex)
{
string str = to_string(nums[startIndex]) + "->" + to_string(nums[endIndex]);
vecRes.push_back(str);
}
else
{
vecRes.push_back(to_string(nums[startIndex]));
}
return vecRes;
}
};
设置首尾两个指针,初始时指向首元素,遍历该数组,若当前值=上一值+1,更新尾指针,反之根据首尾指针是否相同,选择不同的方式进行插入,同时更新首尾指针为当前值;遍历完成后,根据首尾指针是否相同,将最后剩余部分进行插入。