微软等数据结构+算法面试100题(46)-- 查找最小的k 个元素
来源:互联网 发布:vb自动登录弹出窗口 编辑:程序博客网 时间:2024/06/11 19:56
查找最小的k 个元素
题目:输入n 个整数,输出其中最小的k 个。
6
题目:输入n 个整数,输出其中最小的k 个。
例如输入1,2,3,4,5,6,7 和8 这8 个数字,则最小的4 个数字为1,2,3 和4。
这是比较有名的top k问题。求在一堆数中,这堆数要大于k。假设有n个。求出前最小的n的元素
1.全排。将所有元素排序,找出前n个。复杂度n*logn。
2.插入排序。需要k趟。复杂度是nk。
3.堆排序。建一个大小为k的最小二叉堆。建堆复杂度是k。剩下元素个数为n-k要进入堆中。需要和堆顶元素比较。下溯(n-k)*logk。所以总的复杂度是n*logk。
4.改进的快排。快排主要是选择轴点。左侧的元素都要比轴点小,右侧的都要比轴点大。[low,pivot-1] pivot [pivot+1,high]
那么如果[low,pivot-1]的元素个数pivot-low=n。这样前n个最小的已经出来了
如果[low,pivot-1]的元素个数pivot-low>n。那么前n个最小的一定在区间[low,pivot-1]。区间缩小了。
如果[low,pivot-1]的元素个数pivot-low<n。那么前n个最小的已经有pivot-low个被找出来了。还剩下n-(pivot-low)在区间[pivot,high]中。
int TopN(int *p,int low,int high,int n){if(high-low+1<=n)return high;int pivot=Parition(p,low,high);if(pivot-low==n)return pivot-1;else if(pivot-low>n)return TopN(p,low,pivot-1,n);elsereturn TopN(p,pivot+1,high,n-(pivot-low+1));}void TopNTest(){int p[]={1,2,15,-10,0,7,-1,25,29,8,6,16,5};int len=sizeof(p)/sizeof(int);cout<<"array : ";ShowArray(p,len);int n=0;cout<<"input n : ";cin>>n;int end=TopN(p,0,len-1,n);cout<<"array : ";ShowArray(p,len);}
6
- 微软等数据结构+算法面试100题(46)-- 查找最小的k 个元素
- (微软面试100题)查找最小的K个元素
- 微软算法100道题-----查找最小的k个元素
- 查找最小的k个元素 【微软面试100题 第五题】
- 微软面试100道之 5 查找最小的k个元素(数组)
- 面试100题:5.查找最小的k个元素
- 面试100题:5.查找最小的k个元素
- 微软等数据结构+算法面试100题(40)-- 旋转数组中的最小元素
- 微软面试100题目之5 查找最小的k个元素
- 【从零单排之微软面试100题系列】05之查找最小的k个元素
- 微软100题(5) 查找最小的k个元素
- 查找最小的k个元素[算法]
- 算法题12 查找最小的k个元素
- 算法讨论(四)--查找最小的k个元素
- 微软试题:查找数组中最小的k个元素
- 程序员面试100题---5.查找最小的k个元素
- 算法与数据结构面试题(5)-查找最小的k 个元素
- 程序员面试题精选100题(05)-查找最小的k个元素[算法]
- Qt 5.0 将支持 Android
- java反射详解
- C++自增运算符的探索
- 爬虫larbin主函数说明
- 医药经验
- 微软等数据结构+算法面试100题(46)-- 查找最小的k 个元素
- Project : error PRJ0019: 工具从"执行注册"
- android的SDK----google中的翻译
- Android listView分组
- Map遍历的两种方式(首推entrySet())--遍历Map时删除元素的方法
- 软件缺陷的生命周期
- C++中的向量(Vector)用法
- building system of android浅析
- 希尔伯特变换的实现——数据分析漫谈