力扣215 陣列中的第K個最大元素

2021-10-19 07:25:05 字數 1289 閱讀 9274

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

時間複雜度:排序時間為o(nlogn),所以時間為o(nlogn)

空間複雜度:o(1)

維持乙個大小為k的最小堆,堆頂的元素始終是當前所有元素中第k大的元素

1 class solution 

9 }

10 return heap.poll();

11 }

12 }

力扣測試時間為:6ms, 空間為40.2mb

時間複雜度:乙個維持堆大小為k的過程,所以時間複雜度為o(nlogk)

空間複雜度:o(k),也就是堆的大小

借助快排的過程

1 class solution 

6 7 public int partition(int nums, int left, int right)

15 nums[left] = nums[right];

16 17 while(left < right && nums[left] <= pivot)

20 nums[right] = nums[left];

21 }

22 nums[left] = pivot;

23 return left;

24 }

25 26 public int quicksort(int nums, int left, int right, int k)else if(mid > k)else

36 }

37 }

力扣測試時間為9ms, 空間為40.6mb

時間複雜度:每次將陣列分成兩段,只會選擇其中一段進行partition操作,所以時間複雜度為o(n+n/2 + n/4 + 1) =

空間複雜度為:o(1)

力扣215 陣列中的第K個最大元素

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。暴力解法 class solution def findkthlargest self,nums,k nums sorted nums,reverse true return ...

力扣第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 思路1 首先將陣列從大到小排序,再根據k值獲...

力扣c語言實現 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...