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

2021-10-05 20:27:57 字數 697 閱讀 7433

統計乙個數字在排序陣列**現的次數。

考察點:二分查詢的應用;知識遷移能力。

思路:可以直接想到時間複雜度為o(n)的從前到後的遍歷方法。

這裡採用二分查詢法,找到特定出現的k,如果中間的數字比k 大,那麼第一次出現的k 只能出現在前半段,如果中間的數字比k小,那麼第一次出現k的位置只能在後半段,如果相等的話,如果這個陣列前面乙個不是k,那麼就可以返回下標位置了,如果是k,說明不是第乙個出現的k,那麼需要接著向前找。同理,找最後一次出現k的位置也是這樣二分查詢並且遞迴。

class solution

else

end = midindex - 1;

}else if (middata > k)

else

begin = midindex + 1;

return getfirstk(data, k, begin, end);//繼續遞迴查詢

}int getlastk(vectordata, int k, int begin, int end)

else if (middata > k)

else

begin = midindex + 1;

return getlastk(data, k, begin, end);

}int getnumberofk(vectordata, int k) 

return number;}};

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

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

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

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

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

題目描述 統計乙個數字在排序陣列 現的次數。示例 1 輸入 nums 5,7,7,8,8,10 target 8 輸出 2 示例 2 輸入 nums 5,7,7,8,8,10 target 6 輸出 0 限制 0 陣列長度 50000 解法一 因為引數是整形,可以用二分查詢k 0.5 k 0.5 兩...