劍指Offer 陣列中最小的k個數

2021-09-22 21:39:41 字數 802 閱讀 7892

思路一:先將陣列排序完序後取k個數就完事了,基於複雜度的考慮,先使用堆排序,複雜度為o(n*logn)

思路二:可實現維持乙個k個數的大根堆,經過維持過的大根堆,就有了較小的k個數,取出即可。

具體步驟:1.可先從陣列中取k個數實現乙個大根堆,

2.遍歷原陣列,將大根堆堆頂元素和原陣列中剩餘的數進行比較,

如果此陣列中的數小於堆頂元素,將陣列的數賦值給大根堆的堆頂元素,再調整堆的順序,使其恢復為大根堆

如果此陣列中的數大於堆頂元素,什麼也不做。

分析:時間複雜度為o(n*logk)

public static arraylistgetleastnumbers_solution(int input, int k) 

//將大根堆中的數和陣列剩餘的數進行比較,調整,維持大根堆,

for(int j=k;j!=input.length;j++)

swap(arr, index, largest);

index = largest;

left = 2 * index + 1;

} }public static void swap(int arr, int i, int j)

public static void main(string args) ;

arraylistgetleastnumbers_solution = getleastnumbers_solution(arr,4);

for (integer integer : getleastnumbers_solution)

}

劍指Offer 旋轉陣列中最小的數字

思路 方案一 直接遍歷陣列,找到最小的。不足以面試哦。方案二 利用二分查詢。當陣列旋轉之後比如,前半部分為遞增陣列,後半部分為遞減陣列。所以可以定義兩個指標 left和right。中間值mid left right 2 當array left rray right 時,說明旋轉陣列在 left,ri...

劍指offer 尋找陣列最小的k個數

題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,分析 傳統的做法可以是o nlog n 就是先排序然後從前面中取出k個值。高效的做法可以實現o nlogk 借助乙個容器,容量k,將陣列的讀入k個數存放在容器中,然後繼續訪問...

劍指offer 最小k個數

1.題目 輸入n個整數,找出其中最小的k個數。例如輸入4,5,1,6,2,7,3,8這8個數字,則最小的4個數字是1,2,3,4,2.方法 1 基於堆排序演算法,構建最大堆。時間複雜度為o nlogk 2 如果用快速排序,時間複雜度為o nlogn 3 如果用插入排序,時間複雜度為o n 2 3.演...