(分治法)查找最大和次大元素

mac2024-04-08  31

 这道题本来是C的源码,但是Java没有指针,不能在函数里修改参数的值,所以只能把两个变量放到一个1*2的数组里

用可以改变数组元素值的方式来改变变量值!

java里除了用final定义的变量,其他的变量值都可以修改!

代码如下:

public class 查找最大和次大元素 { //java不提供指针,所以不能在函数里修改变量的值 static void solve(int[]a,int low,int high,int[] b){//b[0]代表最大值,b[1]代表次小值 if(low==high){//区间中只有一个元素 b[0]=a[low]; b[1]=(int)Double.NEGATIVE_INFINITY;//负无穷 } else if(low==high-1){//区间中只有两个元素 b[0]=(a[low]>a[high]?a[low]:a[high]); b[1]=(a[low]<a[high]?a[low]:a[high]); } else{//两个以上的元素 int mid=(low+high)/2; int[] c=new int[2]; c[0]=-9999;c[1]=-9999; //回忆递归的入栈出栈过程,把下面的递归想象成一棵递归树 solve(a, low, mid, c);//左区间求解 int[] d=new int[2]; d[0]=-9999;d[1]=-9999; solve(a, mid+1, high,d);//右区间求解 if(c[0]>d[0]){ b[0]=c[0]; b[1]=(d[0]>c[1]?d[0]:c[1]); } else{ b[0]=d[0]; b[1]=(d[1]>c[0]?d[1]:c[0]); } } } public static void main(String[] args) { // TODO 自动生成的方法存根 int[] max=new int[2]; max[0]=-9999;max[1]=-9999;//分别为最大值和次大值 int[] a={5,2,1,4,3}; solve(a,0,a.length-1,max); System.out.println("最大值:"+max[0]); System.out.println("次大值:"+max[1]); } }

 

最新回复(0)