陣列中的第K個最大元素

2022-05-04 03:33:09 字數 824 閱讀 8663

在未排序的陣列中找到第 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 ≤ 陣列的長度。

解析:注意這道題中說的是k個元素是可以相同的,那麼是可以用小頂堆來做的。 

假設小頂堆的大小為k,那麼堆頂就為第k個元素

時間複雜度為 新建堆的大小1/2 * k * logk

遍歷 (n - k)*logk

總時間複雜度為nlogk的級別

class

solution

init(arr);

for (int i = k; i < len; i++)

else

}return arr[0];

}public

void init(int

data)

}public

void down(int data, int

root)

if (data[next] else

head =next;

left = head * 2 + 1;

right = left + 1;

next =left;

}data[head] =headval;

}}

陣列中的第k個最大元素

在未排序的陣列中找到第 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個最大元素

題目 在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。法一 排序後輸出。法二 優先佇列 堆 法三 利用快速排序的方法。在這裡僅介紹法三,法一法二呼叫庫函式即可。思路 首先,找第k個最大的元素,即是找第n k 1個最小的元素。...

陣列中的第K個最大元素

在未排序的陣列中找到第 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...