剑指offer-面试题30.最小的k个数
来源:互联网 发布:mac mysql 安装 编辑:程序博客网 时间:2024/06/06 01:12
题目:输入n个整数,找出其中最小的k个数,例如输入4,5,1,6,2,7,3,8 这8个数字,则最小的四个数字为1,2,3,4,
这道题是典型的TopK问题,剑指Offer提供了两种方法来实现,一种方法是parition方法,一种方法是建立一个大小为k的堆进行topk求解
这里我们只解释第一种方法:
1.首先随机查找数组中一个元素作为一个基准,然后parition一次使得数组左边的元素小于基本,数组右边的元素大于基准。
2.此时将再将基准插入到数组适当的位置并返回该位置的索引。
3.如果索引index小于k-1则继续在[index+1,end]范围内进行parition,
4.如果索引index大于k-1则继续在[start,index-1]范围内进行pariton
5.直到index==k-1时候结束
代码实现如下:
1 #include <iostream> 2 using namespace std; 3 4 int Partiton(int array[],int start,int end) 5 { 6 int i=start; 7 int j=end; 8 int k=0; 9 int base=array[0];10 while(i<j)11 {12 if(i<j&&base<=array[j])13 j--;14 15 if(i<j)16 {17 array[i]=array[j];18 i++;19 }20 21 if(i<j&&base>array[i])22 i++;23 24 if(i<j)25 {26 array[j]=array[i];27 j--;28 }29 }30 31 array[i]=base;32 33 return i;34 }35 36 int FindTopK(int array[],int start,int end,int k)37 {38 int startindex=start;39 int endindex=end;40 int index=Partiton(array,startindex,endindex);41 42 43 44 while(index!=k-1)45 {46 if(index>k-1)47 {48 endindex=index-1;49 index=Partiton(array,startindex,endindex);50 }51 else52 {53 startindex=index+1;54 index=Partiton(array,startindex,endindex);55 }56 }57 return index;58 }59 60 61 int main()62 {63 int array[]={4,5,1,6,2,7,3,8};64 int len=8;65 int Index;66 int k=4;67 Index=FindTopK(array,0,len-1,k);68 69 cout<<"The Top K number is: ";70 for(int i=0;i<Index+1;i++)71 {72 cout<<array[i]<<" ";73 }74 cout<<endl;75 system("pause");76 return 0;77 }
运行截图:
0 0
- 剑指offer-面试题30.最小的k个数
- 剑指offer面试题30最小的k个数
- [剑指offer][面试题30]最小的k个数
- 【剑指offer】面试题30:最小的K个数
- 剑指Offer:面试题30 最小的k个数
- 剑指offer:面试题30,求最小的K个数
- 剑指offer 面试题30—最小的k个数
- 剑指offer 面试题30 最小的K个数
- 【剑指Offer学习】【面试题30:最小的k个数】
- 《剑指Offer》面试题:寻找最小的K个数
- 剑指offer-面试题30:最小的K个数
- 剑指offer之面试题30:最小的k个数
- 剑指offer之面试题30最小的k个数
- 剑指Offer----面试题30:最小的K个数
- 剑指offer-----面试题30(最小的k个数)
- 剑指offer面试题30:最小的K个数
- 剑指offer--面试题30:最小的K个数
- 剑指Offer之面试题30:最小的K个数
- arguments
- 剑指offer-面试题27.二叉搜索树与双向链表
- 【移动开发】Android应用程序完全退出
- 剑指offer-面试题28.字符串的排列
- 剑指offer-面试题29.数组中出现次数超过一半的数字
- 剑指offer-面试题30.最小的k个数
- SGU171
- html5+css(2)
- SQL 基础--> 子查询
- strcat函数的坑点
- MyBatis (6)——调用存储过程
- js五子棋(带AI)
- C与C++中的const
- Push local non-git project to remote github repo