博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
寻找第K大 网易2016实习研发工程师编程题
阅读量:5049 次
发布时间:2019-06-12

本文共 1753 字,大约阅读时间需要 5 分钟。

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

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

测试样例:

[1,3,5,2,2],5,3

返回:2
 
投机取巧能通过:
1 class Finder {2 public:3     int findKth(vector
a, int n, int K) {4 // write code here5 sort(a.begin(), a.end());6 return a[n - K];7 }8 };

用快排思想:

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 using namespace std;10 11 //用快排的思想:例如找49个元素里面第24大的元素,那么按如下步骤:12 //1.进行一次快排(将大的元素放在前半段,小的元素放在后半段), 假设得到的中轴为p13 //2.判断 p - low == k -1,如果成立,直接输出a[p],(因为前半段有k - 1个大于a[p]的元素,故a[p]为第K大的元素)14 //3.如果 p - low > k-1, 则第k大的元素在前半段,此时更新high = p - 1,继续进行步骤115 //4.如果 p - low < k-1, 则第k大的元素在后半段,此时更新low = p + 1, 且 k = k - (p - low + 1),继续步骤1.16 //由于常规快排要得到整体有序的数组,而此方法每次可以去掉“一半”的元素,故实际的复杂度不是o(nlgn), 而是o(n)。17 class Finder {18 public:19 int partation(vector
& a, int low, int high) {20 int key = a[low];21 while (low < high) {22 while (low < high && a[high] <= key) 23 high--;24 a[low] = a[high];25 while (low < high && a[low] >= key) 26 low++;27 a[high] = a[low];28 }29 a[low] = key;30 return low;31 }32 int findKth(vector
& a, int low, int high, int k)33 {34 int part = partation(a, low, high);35 if (k == part - low + 1) 36 return a[part];37 else if (k > part - low + 1) 38 return findKth(a, part + 1, high, k - part + low - 1);39 else 40 return findKth(a, low, part - 1, k);41 42 }43 int findKth(vector
a, int n, int K) {44 // write code here45 return findKth(a, 0, n - 1, K);46 }47 };48 49 50 //测试51 int main()52 {53 vector
v{ 1,3,5,2,2 };54 Finder solution;55 cout<

转载于:https://www.cnblogs.com/hslzju/p/5723216.html

你可能感兴趣的文章
线性表的顺序存储——线性表的本质和操作
查看>>
【linux】重置fedora root密码
查看>>
用swing做一个简单的正则验证工具
查看>>
百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转
查看>>
pig自定义UDF
查看>>
输入名字显示其生日,没有则让输入生日,做记录
查看>>
爬虫综合大作业
查看>>
Kubernetes 运维学习笔记
查看>>
并查集 经典 畅通工程
查看>>
Spark MLlib 之 Naive Bayes
查看>>
php修改SESSION的有效生存时间
查看>>
spring security 11种过滤器介绍
查看>>
Hibernate一对多、多对一关联
查看>>
一、记录Git使用中遇到的问题及解决方法
查看>>
学习网址
查看>>
前端表格插件datatables
查看>>
内部类
查看>>
树链剖分入门
查看>>
图解算法时间复杂度
查看>>
UI_搭建MVC
查看>>