Two pointers.
#include <vector>
#include <string>
#include <iostream>
using namespace std;
/*
Given a sorted integer array where the range of element 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"];
*/
vector<string> missingRanges(vector<int>& nums, int low, int high) {
if(nums.size() == 0) return {to_string(low) + "->" + to_string(high)};
vector<string> res;
int start = low;
int end = nums[0];
for(int i = 0; i < nums.size(); ++i) {
if(end - start >= 2) {
string tmp = to_string(start) + "->" + to_string(end - 1);
res.push_back(tmp);
}
start = end + 1;
end = nums[i];
}
if(end - start >= 2) {
string tmp = to_string(start) + "->" + to_string(end - 1);
res.push_back(tmp);
}
if(high - end >= 2) {
string tmp = to_string(end + 1) + "->" + to_string(high);
res.push_back(tmp);
} else if(high - end >= 1) res.push_back(to_string(high));
return res;
}
int main(void) {
vector<int> nums {0, 1, 2, 5, 99};
vector<string> res = missingRanges(nums, 0, 100);
for(string s : res) cout << s << endl;
}