分治算法求解整数序列最大值最小值问题
分治思想:可以参考这位老哥的博客一次性弄懂到底什么叫做分治思想
话不多说,上代码:
package Test;
public class Test {
int max,min;//用来保存max和min
/**
*
* @param a
* @param b
* @return max
*/
public int Max(int a,int b) {
return a>b?a:b;
}
/**
*
* @param a
* @param b
* @return min
*/
public int Min(int a,int b) {
return a>b?b:a;
}
/**
* 分治思想求解问题
* @param a
* @param left
* @param right
*/
public void slove(int[] a,int left,int right) {
if(left==right) {//如果整数序列中只有一个元素
min=Min(a[left],min);
max=Max(a[right],max);
return;
}else if(left+1==right) {//如果整数序列中有两个元素
if(min!=0) {
min=Min(Min(a[left],a[right]),min);
}else
min=Min(a[left],a[right]);
max=Max(Max(a[left],a[right]),max);
return;
}else { //序列中的数大于两个
int mid=(left+right)/2;
slove(a,left,mid);
slove(a,mid+1,right);
}
}
public static void main(String[] args) {
int[] a= {2,1,3,6};
Test t=new Test();
t.slove(a, 0, a.length-1);
System.out.println(t.min+" "+t.max);
}
}
运行结果:
新手第一次写博客,如果有写的不好的地方,欢迎大家批评指正。