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