vector<string> findMissingRanges(vector<int>& nums, int lower, int upper)
{
vector<string> range_gaps;
int low, high;
// beginning range
if (nums[0] - 1 == lower)
range_gaps.push_back(to_string(lower));
else if (lower < *nums.begin() - 2)
range_gaps.push_back(to_string(lower) + "->" + to_string(nums[0] - 1));
// inclusive range
for (int i = 0; i < nums.size() - 1 && nums.at(i) >= lower && nums.at(i) <= upper; i++) {
low = i;
high = i + 1;
if (nums[low] + 1 == nums[high]) continue;
else if (nums[low] + 1 == nums[high] - 1)
range_gaps.push_back(to_string(nums[low] + 1));
else
range_gaps.push_back(to_string(nums[low] + 1) + "->" + to_string(nums[high] - 1));
}
// ending range
if (upper > *nums.rbegin() + 2)
range_gaps.push_back(to_string(*nums.rbegin() + 1) + "->" + to_string(upper));
else if (*nums.rbegin() + 1 == upper - 1)
range_gaps.push_back(to_string(*nums.rbegin() + 1));
return range_gaps;
}
int main()
{
vector<int> test = { 0,1,3,50,75 };
vector<string> elements = findMissingRanges(test, 0, 99);
print(elements);
}