public class test_2{
public static void main(String[] args){
int[] arry = new int[]{0,1,2,3,4,5,6,7,8,9};
int max =bigArry_/*?*/(arry,0,9);//三种求最大子数组之和的方法
System.out.println(max);
}
public static int bigArry_1(int[] arry,int left,int right){//方法一:枚举一 一 列出来
int max=0;
for(int i=left;i<=right;i++){
for(int j=left;j<=right;j++){
int sum=0;
for(int z=i;z<=j;z++){
sum=sum+arry[z];
}
if(sum>max)
max=sum;
}
}
return max;
}
public static int bigArry_2(int[] arry,int left,int right){//与方法二类似
int max=0;
for(int i=left;i<=right;i++){
int sum=0;
for(int j=left;j<=right;j++){
sum=sum+arry[j];
if(sum>max)
max=sum;
}
}
return max;
}
public static int bigArry_3(int[] arry,int left,int right){//分而治之的递归
if(left==right)
return arry[left];
int mid=(left+right)/2;
int left_1=bigArry_3(arry,left,mid);
int right_1=bigArry_3(arry,mid+1,right);
int sum=mergeArry(arry,left,mid,right);
int max=maxSum(left_1,right_1,sum);
return max;
}
public static int mergeArry(int[] arry,int left,int mid,int right){
int leftMax=-999;
int sum=0;
for(int i=mid;i>=left;i--){
sum=sum+arry[i];
if(sum>leftMax)
leftMax=sum;
}
int rightMax=-999;
sum=0;
for(int j=mid+1;j<=right;j++){
sum=sum+arry[j];
if(sum>rightMax)
rightMax=sum;
}
return leftMax+rightMax;
}
public static int maxSum(int left_1,int right_1,int sum){
int sum_1=0;
if(left_1>right_1)
sum_1=left_1;
else
sum_1=right_1;
if(sum_1>sum)
return sum_1;
else
return sum;
}
}
【无标题】求最大子数组之和
最新推荐文章于 2024-12-24 18:38:55 发布