网易2016实习 寻找第K大的数
题目:
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。
给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。
测试样例:
[1,3,5,2,2],5,3
返回:2
思路:采用快速排序的思想,每次根据base划分,根据K值判断在左边还是右边再次进行排序。
代码:
1 class Finder { 2 public: 3 int findKth(vector<int> a, int n, int K) { 4 // write code here 5 helper(a,K,0,n-1); 6 return a[K-1]; 7 } 8 9 void helper(vector<int>& a, int K, int left, int right) 10 { 11 int base = a[left]; 12 int i = left, j = right; 13 while(i < j) 14 { 15 while(i < j && a[j] < base) 16 --j; 17 a[i] = a[j]; 18 while(i < j && a[i] >= base) 19 ++i; 20 a[j] = a[i]; 21 } 22 a[i] = base; 23 if(K-1 < i) 24 { 25 helper(a,K,left,i-1); 26 } 27 else if(K-1 > i) 28 { 29 helper(a, K, i+1 ,right); 30 } 31 else 32 return; 33 } 34 };