题目:
You are given a sorted unique integer array nums.
Return the smallest sorted list of ranges that cover all the numbers in the array exactly. That is, each element of nums is covered by exactly one of the ranges, and there is no integer x such that x is in one of the ranges but not in nums.
Each range [a,b] in the list should be output as:
"a->b"ifa != b"a"ifa == b
Example 1:
Input: nums = [0,1,2,4,5,7] Output: ["0->2","4->5","7"] Explanation: The ranges are: [0,2] --> "0->2" [4,5] --> "4->5" [7,7] --> "7"
Example 2:
Input: nums = [0,2,3,4,6,8,9] Output: ["0","2->4","6","8->9"] Explanation: The ranges are: [0,0] --> "0" [2,4] --> "2->4" [6,6] --> "6" [8,9] --> "8->9"
Example 3:
Input: nums = [] Output: []
Example 4:
Input: nums = [-1] Output: ["-1"]
Example 5:
Input: nums = [0] Output: ["0"]
Constraints:
0 <= nums.length <= 20-231 <= nums[i] <= 231 - 1- All the values of
numsare unique. numsis sorted in ascending order.
代码:
#include <sstream>
class Solution {
public:
vector<string> summaryRanges(vector<int>& nums) {
vector<string> res;
if(nums.size() < 1)
return res;
int start = nums[0];
for(int i = 0; i<nums.size(); i++)
{
if(i != nums.size() - 1)
{
if(nums[i+1] == nums[i] + 1)
{
continue;
}
else
{
if(start == nums[i])
{
res.push_back(to_string(nums[i]));
}
else
{
string cur_res = to_string(start) + "->" + to_string(nums[i]);
res.push_back(cur_res);
}
start = nums[i+1];
}
}
else
{
if(start == nums[i])
{
res.push_back(to_string(nums[i]));
}
else
{
string cur_res = to_string(start) + "->" + to_string(nums[i]);
res.push_back(cur_res);
}
}
}
return res;
}
};
题外话:
一次AC~ P.S. 下个月一定要写些除了代码题之外的文章!立个flag~
这篇文章介绍了一种算法,如何根据给定的有序整数数组 nums,生成一系列最小子区间来恰好覆盖所有数组元素,每个区间表示为起始和结束(包括边界)。例如,对于输入 [0,1,2,4,5,7],输出为 ['0->2', '4->5', '7']。实现了一个 C++ 类 Solution 的 summaryRanges 函数来解决这个问题。
373

被折叠的 条评论
为什么被折叠?



