在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
示例 1:
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5
示例 2:
輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4
輸出: 4
說明:
你可以假設 k 總是有效的,且 1 ≤ k ≤ 陣列的長度。
3 2 1 5 6 4
隨機3為前驅 3和最右交換
4 2 1 5 6 index=left
找比p=3小的數,與index交換,index加1
2 4 1 5 6
2 1 4 5 6
最後index和right交換
2 1 5 6 4
k=4,所以只有在3的右面找第k大元素
class solution
public int per(int left,int right,int p)
}swap(index,right);
return index;
}public int sort(int left,int right,int k)
else if(p
else
}public int findkthlargest(int nums, int k)
}
手寫nth element模板(隨機化版快排)
特殊資料下會被卡成n 2 系統的nth element並不會,因為穩定的sort大概用到了3種方法以保持其穩定性 特殊資料下會被卡成n 2 系統的nth element並不會,因為穩定的sort大概用到了3種方法以保持其穩定性 特殊資料下會被卡成n 2 系統的nth element並不會,因為穩定的...
快速排序和隨機化快排學習
0.基本思想 選定基準值 通常為當前陣列的第乙個元素 經過一系列比較和交換,將比基準值小的放在其左邊,將比基準值大的放在其右邊,這稱為是一次迴圈。include using namespace std void qsort int arr,int low,int high 從右向左找比key小的值 ...
隨機化快排 期望執行時間證明
快速排序是比較排序的一種,其最壞執行時間 theta n 2 期望執行時間為 theta nlgn 並且能夠原址排序。實際中的很多排序都由此優化而來。本文主要不對演算法的程式實現進行討論,主要關注其隨機化,及背後的數學證明。在 演算法導論 上,快速排序用 python 表示大致如下 def quic...