给定N个数,求取其最大最小值,要求尽可能的快
来源:互联网 发布:安娜贝尔 知乎 编辑:程序博客网 时间:2024/05/01 04:32
对于N个数的话,按照常规思路需要比较N-1次,然而T(2)=1,所以这里可以使用分治递归的方法
1. 将N个数等分为左边部分和右边部分 left right middle = (left + right)/2 [left midle] 与[left+1 right]
2. 分别求取左边最大,最小值和右边最大最小值
3. 合并左右最大值和左右最小值
代码
//算法
void minmax(int * a, int l, int r, int & min , int & max)
{
int minl, minr, maxl, maxr;
if (r == l) { max = min = a[1]; }
else if ( r == l + 1) {
if (a [ l] > a [r ]){
min = a [ r]; max = a[ l];
}
else {
min = a [ l]; max = a[ r];
}
}
else {
int m = (l + r) / 2;
minmax( a , l , m, minl,maxl);
minmax( a , m+1, r , minr, maxr);
max = maxl > maxr ? maxl : maxr;
min = minl < minr ? minl : minr;
}
}
//测试
int main()
{
int a[9] = {9,4,5,3,7,8,2,1,6};
int min, max;
minmax(a, 0, 8, min, max);
cout << min << endl;
cout << max << endl;
cin.ignore(1);
return 0;
}
0 0
- 给定N个数,求取其最大最小值,要求尽可能的快
- 给定n个数,要求比较次数1.5n同时找出最大值和最小值
- 笔试题&面试题:给定n个数,要求比较次数1.5n同时找出最大值和最小值
- 给定n个实数x1,x2,...,xn,求这n个实数在实轴上相邻2个数之间的最大差值M,要求设计线性的时间算法
- 任意给定一个自然数N,要求M是N的倍数,且他的所有各位数字都是由0或1组成,并要求M尽可能小
- 删除大整数中的给定个数的数,要求得到的数值最大
- 最大最小值:给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。
- 最大最小值:给n个实数,求它们之中的最大值和最小值,要求比较次数尽量小。
- 如果给定一个数组arr[0,...N-1],要求找出相邻两个数的最大差值
- 输入10个数,要求输出其中值最大的元素和该数是第几个
- 对给定的n个数的序列,返回序列中的最大和最小的数
- 给定整数x,定义函数A(n)=1+x+x2+x3+…+xn(n为整数且n>=0).已知乘运算的时间远大于加运算,输入x,n;如何尽可能快的求出A(n)?
- 返回给定的n个数的序列中的最大数和最小数
- [记着玩]查找n个数中的最大或者最小值
- n个数中找最大的k个数问题求解(要求复杂度为O(n))
- 求n个数的最大值和最小值
- 例7.9 输入10个数,要求输出其中值最大的元素和该数是第几个数。
- 给定n个数{1,2,…n},从中选取任意两两不同的k个数,请编写程序输出所有的可能的选择,要求不重不漏。
- 第10周 项目2-1 破解加密信息
- 淘宝旺旺聊天发起代码
- 第十一周 项目六:贪财的富翁
- EnvironmentError: mysql_config not found
- hdu-1796
- 给定N个数,求取其最大最小值,要求尽可能的快
- android,SunDayApp天气源码
- ok6410 linux驱动 四 adc模数转换
- Android 微信接入公共平台回调失败
- 使用Nexus搭建企业maven仓库(二)
- 河南科技学院CSDN高校俱乐部——计算机组装与维修
- TestNG使用
- java基础之抽象 (通过教师资格证考核模拟现实,理解面向对象和抽象)
- JSON介绍