LeetCode 215陣列中第K個最大元素

2021-10-24 16:38:16 字數 2244 閱讀 1291

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

解法1:選擇排序

class

solution

if(nums[j]

> nums[maxindex])}

temp = nums[i]

; nums[i]

= nums[minindex]

; nums[minindex]

= temp;

if(maxindex == i)

temp = nums[length - i -1]

; nums[length - i -1]

= nums[maxindex]

; nums[maxindex]

= temp;

}return nums[length - k];}

}

結果:

32 / 32 個通過測試用例

狀態:通過

執行用時: 14 ms 19%

記憶體消耗: 39.2 mb 49%

解法2:氣泡排序

class

solution}if

(!flag)}}

else}if

(!flag)}}

return nums[endindex];}

}

結果:

32 / 32 個通過測試用例

狀態:通過

執行用時: 211 ms

記憶體消耗: 39.3 mb

解法3:桶排序

class

solution

if(minvalue > num)

}int

result =

newint

[maxvalue - minvalue +1]

;for

(int num : nums)

int total =0;

k = nums.length - k +1;

for(

int i =

0; i < result.length; i++)}

}return0;

}}

結果:

32 / 32 個通過測試用例

狀態:通過

執行用時: 1 ms 100%

記憶體消耗: 39.2 mb 57%

解法4:使用hashmap(失敗)

class

solution

map.

put(num, temp +1)

;}int total =0;

k = nums.length - k +1;

for(map.entry

entry : map.

entryset()

)}return0;

}}

結果:失敗

31 / 32 個通過測試用例
解法5:堆排序(同事完成)

結果:

32 / 32 個通過測試用例

狀態:通過

執行用時: 4 ms

記憶體消耗: 39.5 mb

資源:常用資料結構+演算法

十大經典排序演算法(**演示)

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...