我正在嘗試在Java中使用遞歸實現最大子數組問題。使用遞歸在Java中進行最大子數組檢測
但我的代碼不斷拋出異常。我無法弄清楚是什麼導致了這個問題,我相信這可能是因爲遞歸的基本情況在第一次迭代時觸底。
感謝
import java.lang.*;
class Subarray{
int low;
int high;
int sum;
Subarray MaxCrossSub(int a[], int low, int mid, int high)
{
Subarray sub=new Subarray();
double leftsum=Double.NEGATIVE_INFINITY;
double rightsum=Double.NEGATIVE_INFINITY;
double sum=0;
int maxleft=0;
int maxright=0;
for(int i=mid;i>=low;i--)
{
sum=sum+a[i];
if(sum>leftsum)
{
leftsum=sum;
maxleft=i;
}
}
sum=0;
for(int i=mid+1;i>=high;i++)
{
sum=sum+a[i];
if(sum>rightsum)
rightsum=sum;
maxright=i;
}
sub.low=maxleft;
sub.high=maxright;
sub.sum=maxleft+maxright;
return sub;
}
Subarray MaxSub(int a[],int low,int high) throws Exception
{
Subarray leftsub=new Subarray();
Subarray rightsub=new Subarray();
Subarray crosssub=new Subarray();
if(low==high)
{
leftsub.low=low;
leftsub.high=low;
leftsub.sum=a[low];
}
int mid=(low+high)/2;
leftsub=MaxSub(a,low,mid);
rightsub=MaxSub(a,mid+1,high);
crosssub=MaxCrossSub(a,low,mid,high);
if(leftsub.sum>rightsub.sum && leftsub.sum>crosssub.sum)
return leftsub;
else if(rightsub.sum>leftsub.sum && rightsub.sum>crosssub.sum)
return rightsub;
else
return crosssub;
}
}
public class MaximumSubarray {
public static void main(String[] args) throws Exception {
Subarray sub=new Subarray();
int a[]={13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15-4,7};
int low=0;
int high=16;
sub=sub.MaxSub(a,low,high);
System.out.println("low"+sub.low);
System.out.println("high"+sub.high);
System.out.println("Sum"+sub.sum);
}
}
可以添加子陣最大的幾樣? – Salman
說**我的代碼一直拋出異常**是不夠的。您還需要提供異常詳細信息。 –