2016网易春季实习生招聘编程题-求第K大元素

来源:互联网 发布:功能薄膜材料知乎 编辑:程序博客网 时间:2024/04/27 15:31

题目如下:

有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。

给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。

测试样例:
[1,3,5,2,2],5,3
返回:2
用了分治法来写了如下代码:

#include <iostream>#include <vector>using namespace std;int solve(vector<int> v, int n, int* a){vector<int> left;vector<int> middle;vector<int> right;int m = v[0];for (int t:v){if (t>m){left.push_back(t);}else if (t==m){middle.push_back(t);}else if (t<m){right.push_back(t);}}if (left.size() >= *a){return solve(left, left.size(), a);}   else if (*a>left.size() + middle.size()){*a = *a - left.size() - middle.size();return solve(right, right.size(), a);} else if ((left.size()<*a)&&(*a<=left.size()+middle.size())){return m;}}int main(void){int a = 5;vector<int> v = { 1, 3, 5, 2, 2 };int s = solve(v, v.size(), &a);cout << s << endl;return 0;}
如有问题,请各路大神指教。谢谢!

0 0
原创粉丝点击