算法设计技巧与分析102页算法6.1
利用分治的思想从数组中找出最大值与最小值,时间复杂度为O(logn).
算法很简单就不多说了,直接上代码吧
/**
*
* @author yyd
* 在(n)时间复杂度内求出某个输入数组的最大数与最小数
*
*/
public class MINMAX6_1 {
public static Map minmax(int a[],int low,int high){
Map<String,Integer> map=new HashMap<String,Integer>();
if(high==low){
map.put("min", a[low]);
map.put("max", a[low]);
return map;
}
if(high-low==1){
if(a[high]>=a[low]){
map.put("min", a[low]);
map.put("max", a[high]);
}
else{
map.put("min", a[high]);
map.put("max", a[low]);
}
return map;
}
else{
int mid=(high+low)/2;
Map<String,Integer> m1=minmax(a,low,mid);
Map<String,Integer> m2=minmax(a,mid+1,high);
if(m1.get("min")<=m2.get("min")){
map.put("min", m1.get("min"));
}
else{
map.put("min", m2.get("min"));
}
if(m1.get("max")>=m2.get("max")){
map.put("max", m1.get("max"));
}
else{
map.put("max", m2.get("max"));
}
return map;
}
// return 0;
}
public static void main(String args[]){
int[] a={5,1,2,6,7,3,9,9};
Map<String,Integer> map=minmax(a,0,5);
System.out.println(map.get("min"));
System.out.println(map.get("max"));
}
}