陣列中的第K個最大元素

2021-10-02 18:12:15 字數 1011 閱讀 3023

題目

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。

法一:排序後輸出。

法二:優先佇列(堆)。

法三:利用快速排序的方法。

在這裡僅介紹法三,法一法二呼叫庫函式即可。

思路

首先,找第k個最大的元素,即是找第n-k+1個最小的元素。

步驟一

我們利用快排的思想,每一次對乙個元素進行歸位,判斷該元素最終位置p與n-k+1位置關係。

步驟二

1、n-k+1>p:則對p右側元素進行步驟一操作。

2、n-k+1public

intfindkthlargest

(int

nums,

int k)

helper

(nums,

0,nums.length-

1,nums.length-k)

;return nums[nums.length-k];}

public

void

helper

(int

nums,

int lo,

int hi,

int k)

while

(j-1

>=

0&&nums[

--j]

>v);if

(i>=j)

int temp = nums[i]

; nums[i]

= nums[j]

; nums[j]

= temp;

}int temp = nums[j]

; nums[j]

= v;

nums[lo]

= temp;

if(j>k)

else

if(j}

陣列中的第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個最大元素

在未排序的陣列中找到第 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個最大元素

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