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