由於是要找 k 個最大的數,所以沒有必要對所有數進行完整的排序。每次只保留 k 個當前最大的數就可以,然後每次對新來的元素跟當前 k 個樹中最小的數比較,新元素大的話則插入到陣列中,否則跳過。迴圈結束後陣列中最小的數即是我們要找到第 k 大的數。時間複雜度 (n-k)logk
注意:巢狀for迴圈裡面,比較的物件;以及range的範圍
def輸出:find_kth_max(array, k):
for i in range(1, k):
for j in range(i, 0, -1):
if array[j] > array[j - 1]:
array[j], array[j - 1] = array[j - 1], array[j]
else
:
pass
for i in
range(k, len(array)):
if array[i] > array[k - 1]:
array[k - 1] =array[i]
for j in range(k - 1, 0, -1):
if array[j] > array[j - 1]:
array[j], array[j - 1] = array[j - 1], array[j]
else
:
pass
return array[k - 1]
n = int(input("
想查詢第幾大的元素:"))
print(find_kth_max([47, 44, 40, 18, 99, 36, 37, 83, 42, 16, 5, 15, 0], n))
想查詢第幾大的元素:5LintCode 第k大的元素
問題 給定乙個陣列,求第k大的元素 分析 題目可以轉換成排序的問題,因為排序好的陣列查詢很方便。慣性思維的解法 超出時間 從左到右遍歷得到最小的元素放在左邊 class solution public int commonsort int nums return nums 氣泡排序解法 超出時間 c...
查詢第K大的值
這種題一般是給定n個數,然後n個數之間通過某種計算得到了新的數列,求這新的數列的第k大的值 poj3579 題意 用 n 個數的序列 x i 生成乙個新序列 b 新的序列定義為 對於任意的 i j 且 i j 有 b abs x i x j 問新序列的中位數是什麼,如果新序列的長度為偶數那麼我們定義...
輸出陣列第k大的元素
用快速排序的思想輸出陣列第k大的元素 1 include2 include3 using namespace std 45 遞迴實現 返回陣列第k大的值.陣列下標區間是 begin,end 其中陣列假定n個元素,則k的值在區間 1,n 6 能夠使用這種方法的前提條件是 n個數不能重複。如果n個數中有...