// 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; }