163. Missing Ranges
做题历程:
- 应该做了不止1次,本次耗时20分钟,独立解出
本题并不难,但是一次做出来并不容易。这种题其实没有什么经典算法可以依赖,纯粹就是解决问题。。大概说一下本题需要做好的亮点:
- 将
lower - 1和upper + 1塞入nums这样可以简化步骤 - 但是这就好注意
MAX_INT和MIN_INT的问题,不过这也不难解决,因为nums本身是一个sorted array,而MIN_INT - 1和MAX_INT + 1都会破坏这个结构,所以可以轻易识别出来,就不会得到错误的答案了
代码如下:
class Solution {
public:
vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
vector<string> res;
nums.insert(nums.begin(), lower - 1);
nums.push_back(upper + 1);
for (int i = 0; i < nums.size() - 1; ++i) {
if (nums[i] + 1 >= nums[i+1]) {
continue;
}
else if (nums[i] + 2 == nums[i+1]) {
res.push_back(to_string(nums[i] + 1));
}
else {
res.push_back(to_string(nums[i] + 1) + "->" + to_string(nums[i+1] - 1));
}
}
return res;
}
};