Min_Max

来源:互联网 发布:淘宝精品宝贝采集神器 编辑:程序博客网 时间:2024/06/11 10:50

一般来说,min_max的做法是扫两遍,比较次数(2n)上下,

但是,下面的方法,不说话,上代码,请欣赏:

#include "cstdio.h"int a[]={0,-9,1,2,-3,8,4,7,15,6};void minmax(int l, int r, int& min, int & max){int minl, minr, maxl, maxr;if(l==r) min=max=a[l];else if(l+1==r) {if(a[l]<a[r]) min=a[l], max=a[r];else min=a[r], max=a[l];}else {int mid=(l+r)>>1;minmax(l, mid, minl, maxl);minmax(mid+1, r, minr, maxr);min=minl<minr ? minl:minr;max=maxl>maxr ? maxl:maxr;}}void minmax(int n, int& min, int& max){int i, mi, ma;if(n%2) {min=max=a[0];i=1;}else {if(a[0]<a[1]) min=a[0], max=a[1];else min=a[1], max=a[0];i=2;}while(i<n) {if(a[i]<a[i+1]) mi=a[i], ma=a[i+1];else mi=a[i+1], ma=a[i];if(min>mi) min=mi;if(max<ma) max=ma;i+=2;}}int main(){int min, max;minmax(0, 9, min, max);printf("min: %d max: %d\n", min, max);minmax(10, min, max);printf("min: %d max: %d\n", min, max);return 0;}


原创粉丝点击