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

2021-10-10 07:33:34 字數 1115 閱讀 4757

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

首先明白一點,題目要求返回第n個最大的元素,包括重複,那麼在降序排序後,直接返回nums[k]即可。

快速排序。快速排序的思路在總結裡面已經寫了。下面是通過快速排序,排好後,直接找第k個元素的**,減枝的影響還是很大的。

class solution 

public void quick(int nums,int left,int right)

int idx = sort(nums,left,right);

quick(nums,left,idx-1);

quick(nums,idx+1,right);

}public int sort(int nums,int left,int right)

}swap(nums,idx,left);

return idx;

}public void swap(int nums,int idx1,int idx2)

}

但是,發現有乙個問題,那就是做了很多無意義的排序,當k=right這個判斷,為什麼?因為根本就不需要這個條件,加上了idx==k-1這個條件之後,頂櫃一定會定位到這個位置。沒有優化leetcode花費了46ms,優化之後耗時10ms。

class solution 

public int quick(int nums,int left,int right,int k) else

}public int sort(int nums,int left,int right)

}swap(nums,idx,left);

return idx;

}public void swap(int nums,int idx1,int idx2)

}

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

題目 方法一 二 時間複雜度 o n logk 向大小為k的堆中新增元素的時間複雜度為o logk 我們將重複該操作n次 空間複雜度 o k 用於儲存k個堆元素 自己解答 速度太慢?有待提高 time 2019 10 9 下午01 04 file 陣列中第k大元素 215.py 在未排序的陣列中找到...

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

思路1 快排 考慮先使用快排實現,練習快排。時間複雜度o n 如果我們把每次分割槽遍歷的元素個數加起來,就是 n n 2 n 4 n 8 1。這是乙個等比數列求和,最後的和等於 2n 1。所以,時間複雜度就為 o n 因為一次快排可以實現乙個數歸位,比較index和n k的大小 如果index n ...

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

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。輸入 3,2,1,5,6,4 和 k 2 輸出 5 輸入 3,2,3,1,2,4,5,5,6 和 k 4 輸出 4 你可以假設 k 總是有效的,且 1 k 陣列的長度。思路和演...