5.查找最小的k个元素(数组)
2012-10-12 15:38
211 查看
题目:输入n个整数,输出其中最小的k个。
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
这里先用排序,将原来的数组排序,去前k个值则可以完成任务!但此处并没有要求最后获得的数组是有序的,所以可以创建含k个
元素的数组。原数组的0-(k-1)个位置的值直接复制到新建的数组。原始数组从第k个位置开始,每取出一个值,和新建数组的最大值
相比较,然后决定是否替换新建数组中的最大值!
例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
这里先用排序,将原来的数组排序,去前k个值则可以完成任务!但此处并没有要求最后获得的数组是有序的,所以可以创建含k个
元素的数组。原数组的0-(k-1)个位置的值直接复制到新建的数组。原始数组从第k个位置开始,每取出一个值,和新建数组的最大值
相比较,然后决定是否替换新建数组中的最大值!
#include <iostream> void findmin(int* scr,int* des,int s,int d); int findmax(int* des,int d); int main() { using namespace std; int s = 10; int d = 3; int scr[10] = {3,5,9,1,7,2,4,10,8,6}; int des[3] = {0}; findmin(scr,des,s,d); for (int i=0;i<d;i++) cout<<des[i]<<" "; cout<<endl; system("pause"); return 0; } void findmin(int* scr,int* des,int s,int d) { for (int i =0;i<d;i++) des[i] = scr[i]; for (int i=d;i<s;i++) { if (scr[i]<des[findmax(des,d)]) des[findmax(des,d)] = scr[i]; } } int findmax(int* des,int d) { int maxdata = des[0]; int pos = 0; for (int i=0;i<d;i++) { if (maxdata<des[i]) { maxdata = des[i]; pos = i; } } return pos; }
相关文章推荐
- 8+查找一个旋转数组的最小元素
- 关于查找数组中最小的k个元素的解答、updated
- 实验九指针1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 算法实验一:二分查找算法改进: 当搜索元素x不存在时,返回小于x的最大元素位置i和大于x的最小元素位置j. 当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
- 字符串算法——查找有序数组旋转后最小值(有重复元素)(Find Minimum in Rotated Sorted Array II)
- 关于查找数组中最小的k个元素的解答、updated
- 实验9 指针1 、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依
- 查找最小的k个元素(数组)
- 关于查找数组中最小的k个元素的解答、updated
- 每天一算法(查找最小的k个元素(数组))
- 实验9 指针1 1、程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 在一个数组中查找最大的K个元素或者最小的K个元素
- No5、查找最小的 k 个元素(数组)
- 5.查找最小的k个元素(数组)
- 无序数组同时查找最大和最小的元素
- 实验9(1)程序填空:下列程序在数组中同时查找最大元素和最小元素的下标,分别存放在 main()函数的max 和 min 变量中。要求:根据运行结果分析程序和填空,并注释说明填充依据。
- 查找最小的k个元素(数组)
- 查找旋转数组中的最小值元素(剑指offer8)
- 5.查找最小的k个元素(数组)
- 设计一个最优算法来查找一n个元素数组中的最大值和最小值。已知一种需要比较2n次的方法,请给一个更优的算法。