leetcode215 陣列中的第K個最大元素

2021-09-26 07:22:55 字數 1027 閱讀 5640

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

1.最容易想到的就是先排序,然後獲取下標為length - k 的元素

2.使用堆排序的思想,建立大頂堆,將所有陣列中的元素加入堆中,並保持堆的大小小於等於 k。這樣,堆中就保留了前 k 個最大的元素。這樣,堆頂的元素就是正確答案。

class solution 

// output

return heap.poll();

}}

3.使用快排的思想,首先隨機選擇乙個樞軸。

然後使用劃分演算法將樞軸放在陣列中的合適位置 pos。將小於樞軸的元素移到左邊,大於等於樞軸的元素移到右邊。

比較 pos 和 n - k 以決定在哪邊繼續遞迴處理。這樣我們只用處理單邊的序列,節省時間。

時間複雜度 : 平均情況 o(n),最壞情況 o(n 2 )。

空間複雜度 : o(1)。

class solution 

public int partition(int nums, int left, int right, int pivot_index)

}// 3.把基準歸位

swap(nums,store_index, right);

return store_index;

}public int quickselect(int nums, int left, int right, int k_smallest)

public int findkthlargest(int nums, int k)

}

LeetCode 215 陣列中的第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...

LeetCode 215 陣列中的第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...

Leetcode215 陣列中的第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...