Problem Description:
Given a sorted integer array where the range of elements are [lower, upper] inclusive, return its missing ranges.
For example, given [0, 1, 3, 50, 75], lower = 0 and upper = 99, return [“2”, “4->49”, “51->74”, “76->99”].
Analysis:
Not a hard question, but need to find a way to write succinct code. So try to think about a pattern or a process that easy to
manipulate. Using pre and cur two variables to make problem easier.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
string missRanges(int low, int high)
{
return (low == high) ? "" + to_string(low) : to_string(low) + "->" + to_string(high);
}
vector<string> findMissingRanges(vector<int>& nums, int lower, int upper)
{
vector<string> res;
int pre = lower - 1, n = nums.size();
//pre is the last num in the previous range.
for (int i = 0; i <= n; i++)
{
int cur = (i == n) ? upper + 1 : nums[i];
if (cur - pre >= 2)
res.push_back(missRanges(pre + 1, cur - 1));
pre = cur;
}
return res;
}
int main(int argc, char const *argv[])
{
vector<int> nums{0, 3, 50, 75};
vector<string> res = findMissingRanges(nums, -2, 99);
for (auto s : res)
cout << s << endl;
return 0;
}