// Source : https://oj.leetcode.com/problems/missing-ranges/
// Author : Hao Chen
// Date : 2014-12-11
/**********************************************************************************
*
* 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"].
*
**********************************************************************************/
#include
#include
#include
#include
#include
#include
#include
using namespace std;
string& makeRange(int lo, int hi){
static string result;
result="";
stringstream ss;
if (lo != hi){
ss << lo << "->" << hi;
}else{
ss << lo;
}
ss >> result;
return result;
}
vector findMissingRanges(int A[], int n, int lower, int upper) {
vector result;
if ( n<=0 ) {
result.push_back(makeRange(lower, upper));
return result;
}
if (lower < A[0]){
result.push_back(makeRange(lower, A[0]-1 < upper ? A[0]-1 : upper));
}
for(int i=0; i A[n-1]){
result.push_back(makeRange(A[n-1]+1, upper));
}
return result;
}
void printVector(vector v){
cout << "[";
int i=0;
for(; i string2Array(string s){
vector strarr;
istringstream iss(s);
copy(istream_iterator(iss),
istream_iterator(),
back_inserter(strarr));
vector result;
for (int i=0; i result = findMissingRanges(A, sizeof(A)/sizeof(A[0]), lo ,hi);
printVector(result);
//usage: ./missingRanges 0 9 "3 5 7"
if (argc>3){
lo = atoi(argv[1]);
hi = atoi(argv[2]);
vector a;
a = string2Array(argv[3]);
int *pA = &a[0];
result = findMissingRanges(pA, a.size(), lo, hi);
printVector(result);
}
return 0;
}