面試題 在排序陣列中查詢數字

2021-08-15 08:27:08 字數 1042 閱讀 4129

數字在排序陣列中出現的次數。

統計乙個數字在排序陣列中出現的次數。例如,輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4。

思路:先用二分法拿到第乙個要求數字的位置。

int getfirstk(int* data,int length,int k,int start,int end)

if(start>end)

return -1;

int middleindex=(start+end)/2;

int middledata=data[middleindex];

if(middledata==k)

else if(middledata>k)

end=middleindex-1;

else

start=middleindex+1;

return getfirstk(data,length,k,start,end);

再用二分法求最後乙個要求數字

int getlastk(int* data,int length,int k,int start,int end)

if(start>end)

return -1;

int middleindex=(start+end)/2;

int middledata=data[middleindex];

if(middledata==k)

else if(middledata

start=middleindex+1;

else

end=middleindex-1;

return getlastk(data,length,k,start,end);

接下來整合:

int getnumberofk(int* data,int length,int k )

int number=0;

if(data!=nullptr&&length>0)

return number;

總結:兩個找頭找尾的方法都耗時o(logn),所以,總的耗時還是o(logn)。

面試題53 在排序陣列中查詢數字

統計乙個數字在排序陣列中出現的次數,例如,輸入排序陣列和數字3,由於3在這個陣列中出現了4次,因此輸出4.思路 既然輸入的陣列是排序的,那麼我們自然能想到用二分查詢演算法,如何高效的利用二分查詢,可以分別利用二分查詢找到第乙個k和最後乙個k。class solution return number ...

面試題53 在排序陣列中查詢數字

題目一 統計乙個數字在排序陣列 現的次數。解法一 利用c stl的二分查詢 class solution int getnumberofk vectordata,int k 解法二 看見有序,肯定就是二分查詢了,演算法比較簡單,不多說,值得一提的是,不要拘泥於遞迴,要會迴圈寫法。暴力匹配,時間複雜度...

面試題53 在排序陣列中查詢數字

統計乙個數字在排序陣列 現的次數。考察點 二分查詢的應用 知識遷移能力。思路 可以直接想到時間複雜度為o n 的從前到後的遍歷方法。這裡採用二分查詢法,找到特定出現的k,如果中間的數字比k 大,那麼第一次出現的k 只能出現在前半段,如果中間的數字比k小,那麼第一次出現k的位置只能在後半段,如果相等的...