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"].
需要考虑lower upper 在数组元素A[i]~A[j]之间的情况,即先用二分查找,找到第一个A[begin]大于等于lower的下标begin,再找到第一个大于等于upper的下标end,若找到,则第一个小于upper的下标为end-1;
string i_tos(int n){ string s=""; char buf[4]; s+=itoa(n,buf,10); return s;}string show(int left, int right){ if(left==right)return i_tos(left); else return i_tos(left)+"->"+i_tos(right);}//找第一个大于等于value的数组的下标int iLower(int A[], int left, int right, int value){ while(leftfindMissingRanges(int A[], int n, int lower, int upper) { vector res; if(n==0||upper A[n-1]) res.push_back(show(lower,upper)); else { int begin=iLower(A, 0, n-1, lower); if(lower
之前没有考虑lower upper 在数组元素A[i]~A[j]之间,以下为之前的代码:
1). 为空,lower upper 之间关系。
2). lower A[0] 之间关系
3). A[i]~A[i+1] 之间关系
4). A[A.length-1] ~ upper 之间关系
string i_tos(int n) { string s=""; char buf[4]; s+=itoa(n,buf,10); return s; } vectorfindMissingRanges(int A[], int n, int lower, int upper) { vector res; string str=""; if(n==0) { if(upper-lower>=1) str+=i_tos(lower)+"->"+i_tos(upper); else str+=i_tos(lower); if(str!="")res.push_back(str); } else { if (lower 1)str+=i_tos(lower)+"->"+i_tos(A[0]-1); else str+=i_tos(lower); if(str!="")res.push_back(str); } for (int i=1;i 2) str+=i_tos(A[i-1]+1)+"->"+i_tos(A[i]-1); else if(A[i]-A[i-1]==2) str+=i_tos(A[i-1]+1); if(str!="")res.push_back(str); str=""; } if(upper>A[n-1]) { if(upper-A[n-1]>1) str+=i_tos(A[n-1]+1)+"->"+i_tos(upper); else str+=i_tos(upper); if(str!="")res.push_back(str); } } return res; }