排序陣列中尋找k的個數

2021-08-14 21:26:12 字數 502 閱讀 2592

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

既然陣列有序,考慮二分查詢。

記錄一下實現細節,劍指offer中使用的遞迴形式,我的**用迴圈實現。

迴圈的條件用start和end相對大小來控制,這也是二分查詢的原始控制條件。

在尋找第乙個k的時候,如果mid已經是k,但是這個數之前也是k,說明這並不第乙個k,此時應該向陣列左半部去查,尋找最後乙個k正好反過來,應該向右半部去查。

int getfirstk(vector

data ,int k)

return -1;

}int getlastk(vector

data ,int k)

return -1;

}int getnumberofk(vector

data ,int k)

總結:在有序陣列中或者陣列在某種條件下有序時,都可以用二分查詢的思路去靠一下。

尋找陣列最大K個數

給定乙個無序陣列,找出最大的k個數。以下方法可以解決此類問題。快速排序中,其中最重要的一步是如何找到某個基準值的最終在陣列的存放位置index,找到這個位置index後,則index左邊的值全小於等於基準值,index右邊的值全大於基準值。在本題中要找top k大的數,那麼過程必須反著來,也即ind...

在排序陣列中找最接近的K個數

給乙個目標數target,乙個非負整數k,乙個按照公升序排列的陣列a。在a中找與target最接近的k個整數。返回這k個數並按照與target的接近程度從小到大排序,如果接近程度相當,那麼小的數排在前面。樣例 1 輸入 a 1,2,3 target 2,k 3 輸出 2,1,3 樣例 2 輸入 a ...

快速排序 尋找無序陣列中的第k大的數

思路是利用快速排序 因為快速排序的分治思想可以將查詢的範圍縮小 快速排序的思想 low為陣列的起始點,high為陣列的尾部點。交替掃瞄 1.固定陣列的第乙個數為定點,從陣列的尾部high開始往左查詢,直到第乙個比定點小的數,和定點交換,因此當前點為空 high 2.從陣列的起始處,low找到第乙個比...