Java演算法-求最大和的子陣列序列
阿新 • • 發佈:2019-01-07
問題:有一個連續陣列,長度是確定的,它包含多個子陣列,子陣列中的內容必須是原陣列內容中的一個連續片段,長度不唯一,子陣列中每個元素相加的結果稱為子陣列的和,現要求找出和最大的一個子陣列。
具體演算法如下:
方法一(最優演算法):分治法
import java.util.Scanner; public class Second { public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); System.out.println("輸入陣列長度"); int n=sc.nextInt(); System.out.println("輸入陣列資料(用空格分開)"); int i; int a[]=new int[n]; for(i=0;i<n;i++) a[i]=sc.nextInt(); int begin=0;//子陣列開始下標 int end=0;//子陣列結束下標 int maxValue=a[0]; int tempValue=maxValue; //for迴圈尋找最大和的連續子陣列 for(i=1;i<n;i++) { tempValue+=a[i]; if((tempValue>a[i])&&(tempValue>maxValue)) { end=i; maxValue=tempValue; } else if(tempValue<=a[i]) { begin=i; end=i; tempValue=a[i]; } } //輸出最大和的連續子陣列的相關資訊 System.out.println("最大子陣列和為:"+maxValue+"\n子陣列內容為:"); System.out.println("下標:"); for(i=begin;i<=end;i++) System.out.print(i+" "); System.out.println("\n"+"下標對應數值:"); for(i=begin;i<=end;i++) System.out.print(a[i]+" "); } }