作業 查詢第k大的元素

2022-04-11 00:49:38 字數 1028 閱讀 6185

由於是要找 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))

輸出:

想查詢第幾大的元素:5

LintCode 第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個數中有...