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

2021-09-05 09:53:55 字數 1589 閱讀 7764

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

public

intfindkthlargest

(int

nums,

int k)

class

solution

boolean

isempty()

void

insert

(int e)

intextract()

private

void

shiftup

(int k)

else}}

private

void

shiftdown

(int k)

if(data[j]

>data[k]

)else}}

private

void

swap

(int i,

int j)

}public

intfindkthlargest

(int

nums,

int k)

int ret =0;

for(

int i =

0; i < k; i++

)return ret;

}}

此法時間複雜度為o(n),理論上比前兩種方法都要快,然而實際上執行速度要比前兩種慢很多,不是很懂其中的原理…

//解法3 快排的思想 只需一次遍歷

public

intfindkthlargest3

(int

nums,

int k)

else

if(pos>n-k)

else}}

private

intpartition

(int

nums ,

int l ,

int r)

while

(j>=l+

1&& nums[j]

>=pivot)

if(i>j)

swap

(nums,i,j)

; i++

; j--;}

swap

(nums,l,j)

;return j;

}private

void

swap

(int

nums,

int i,

int j)

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

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