网易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 };

 

posted @ 2016-09-07 15:33  zhangbaochong  阅读(274)  评论(0)    收藏  举报