一、題目名稱及內容java
[編程題]尋找第K大編程
有一個整數數組,請你根據快速排序的思路,找出數組中第K大的數。 給定一個整數數組a,同時給定它的大小n和要找的K(K在1到n之間),請返回第K大的數,保證存在。 測試樣例: [1,3,5,2,2],5,3 返回:2
二、題目解析數組
先將數組a進行快速排序,a[n-K]就是第K大的元素。測試
代碼以下:ui
import java.util.*; public class Finder { public int findKth(int[] a, int n, int K) { // write code here quickSort(a,0,n-1); return a[n-K]; } public void quickSort(int[]a,int low,int high){ if(low<high){ int q = partition(a,low,high); quickSort(a,low,q-1); quickSort(a,q+1,high); } } public int partition(int[]a,int low,int high){//劃分過程,將a數組劃分紅小於主元的部分,主元,大於主元的部分。 int val = a[high]; int i = low-1; for(int j=low;j<=high-1;j++){ if(a[j]<=val){ i++; int temp = a[i]; a[i] = a[j]; a[j] = temp; } } int temp = a[i+1]; a[i+1] = a[high]; a[high] = temp; return i+1;//返回主元 } }