您的位置:首页 > 编程语言 > Java开发

数组问题之数组最值问题<Java实现>

2012-11-26 11:35 507 查看
/**
* 寻找数组的最大值和最小值问题
* @author Sking
*/
package 数组问题;

public class 数组最值 {

/**
* 遍历数组法,比较次数2n次
* @param array 指定数组
* @return 包含有最大值和最小值的数组
*/
public static int[] MaxAndMin0(int[] array){
int max=Integer.MIN_VALUE,
min=Integer.MAX_VALUE;
for(int i=0;i<array.length;i++){
if(array[i]>max)
max=array[i];
if(array[i]<min)
min=array[i];
}
return new int[]{min,max};
}

/**
* 将数组分为两个部分,偶数索引位置存在相邻两元素中的较大值,
* 奇数索引部分存在相邻两元素中的较小值,最后在偶数索引位置上
* 查找最大值,在奇数索引位置上查找最小值。
* 时间复杂度:比较次数1.5*n,交换次数n/2
* @param array 指定数组
* @return 最大值和最小值构成的数组
*/
public static int[] MaxAndMin1(int[] array){
int max=Integer.MIN_VALUE,
min=Integer.MAX_VALUE;
for(int i=0;i<array.length-1;i+=2){
if(array[i]<array[i+1]){
//交换相邻两数,使大数位于偶数索引上
int temp=array[i];
array[i]=array[i+1];
array[i+1]=temp;
}
}
for(int i=0;i<array.length;i+=2)
if(array[i]>max)
max=array[i];
for(int i=1;i<array.length;i+=2)
if(array[i]<min)
min=array[i];
return new int[]{min,max};
}

/**
* 将数组相邻元素进行概念上的分组,将两数中的较大值
* 与max比较并更新max的值,将两数中的较小值与min
* 比较并更新min的值
* 时间复杂度:比较次数为1.5*n,但交换次数为0
* @param array 指定数组
* @return 最大值和最小值构成的数组
*/
public static int[] MaxAndMin2(int[] array){
int max=Integer.MIN_VALUE,
min=Integer.MAX_VALUE;
for(int i=0;i<array.length-1;i+=2){
if(array[i]>array[i+1]){
if(array[i]>max)
max=array[i];
if(array[i+1]<min)
min=array[i+1];
}else{
if(array[i]<min)
min=array[i];
if(array[i+1]>max)
max=array[i+1];
}
}
if(array.length%2!=0){//数组个数为奇数,要处理最后一个元素
int t=array[array.length-1];
if(t>max)
max=t;
if(t<min)
min=t;
}
return new int[]{min,max};
}

/**
* 递归分治方法查找数组中的最大值和最小值
* 性能:比较次数为1.5*n-2
* @param array 当前考虑数组段
* @param l 数组段的左端索引
* @param r 数组段的右端索引
* @return 指定数组中的最大值和最小值
*/
public static int[] MaxAndMin3(int[] array,int l,int r){
if(r-l<=1){
if(array[l]<array[r])
return new int[]{array[l],array[r]};
else
return new int[]{array[r],array[l]};
}
int[] leftResult=MaxAndMin3(array,l,l+(r-l)/2);
int[] rightResult=MaxAndMin3(array,l+(r-l)/2+1,r);
return new int[]{Math.min(leftResult[0],rightResult[0]),
Math.max(leftResult[1],rightResult[1])};
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: