- 如题,一个n长度的数组至少要比较多少次才能得出最小值和最大值
- 解法:先比较第1,2个值,大的设置为最大值,小的设置的为最小值,比较次数为1,其余n-2长度每两个比较大小,
大的与之前的最大值比较谁大,小的与之前的最小值比较谁小,比较次数为3*(n-2)/2次。那么总的次数就为
3*(n-2)/2+1次。
class _Main{
public static int[] work(int a,int b){
int tmp=a;
if(a<b){
a=b;
}
b=tmp;
return new int[]{a,b};
}
public static int[] solve(int[] a){
if(a.length==0){
return null;
}
if(a.length==1){
return new int[]{a[0],a[0]};
}
int max=Math.max(a[0],a[1]);
int min=Math.min(a[0],a[1]);
for(int i=2;i<a.length;i+=2){
int[] b=work(a[i],a[i+1]);
max=Math.max(max,b[0]);
min=Math.min(min,b[1]);
}
if((a.length-2)%2==1){
max=Math.max(max,a[a.length-1]);
min=Math.min(min,a[a.length-1]);
}
return new int[]{max,min};
}
}