尋找第 K 大的數

2021-10-24 12:10:34 字數 1844 閱讀 5833

題目描述

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

縮減版的快排

剛開始肯定會想到使用快排,先對nums陣列進行快速排序,然後再返回第k大的數:nums[index],其中index為倒數第k個元素的下標:index=nums.length-k仔細想想,因為我們只需要求取第k的數,其實完全不用對整個陣列進行快排,可以使用閹割版的快排

我們呼叫partition = int partition(int arr, int left, int right)

private

void

quicksortk

(int

arr,

int left,

int right,

int index)

else

if(partition > index)

else}}

// 將陣列分為左右兩半

private

intpartition

(int

arr,

int left,

int right)

arr[left]

= arr[right]

;while

(left < right && arr[left]

<= pivot)

arr[right]

= arr[left];}

arr[left]

= pivot;

//left可以改為right

return left;

}}下面是快排的**,來和原版的快排對比一下

private

static

void

quicksort

(int

arr,

int left,

int right)

}private

static

intpartition

(int

arr,

int left,

int right)

arr[left]

= arr[right]

;while

(left < right && arr[left]

<= pivot)

arr[right]

= arr[left];}

arr[left]

= pivot;

//right可以改為left

return left;

}

尋找第K大的數

題目描述 要求在n個不重複的整數中,找出第k大的整數 其中0輸入第一行為兩個正整數n k 第二行為n個整數,輸入保證這n個整數兩兩相異,每個整數的範圍在 1000000到1000000之間 輸出輸出第k大的整數值 樣例輸入 5 33 2 4 5 1 樣例輸出 3 如下 include include...

尋找第K大的數

在一堆資料中查詢到第k個大的值。名稱是 設計一組n個數,確定其中第k個最大值,這是乙個選擇問題,解決這個問題的方法很多。所謂 第 前 k大數問題 指的是在長度為n n k 的亂序陣列中s找出從大到小順序的第 前 k個數的問題。解法1 我們可以對這個亂序陣列按照從大到小先行排序,然後取出前k大,總的時...

尋找第k大的數

給定乙個整數陣列arr,同時給定它的大小n和要找的k k在1到n之間 返回第k大的數。解法一 結合快排思想,將陣列從大到小排序的過程中返回確定好的元素的下標,與k比較,將範圍逐漸縮小。public class test int n findkth arr,5,2 system.out.println...