1. 程式人生 > >Java演算法-求最大和的子陣列序列

Java演算法-求最大和的子陣列序列

問題:有一個連續陣列,長度是確定的,它包含多個子陣列,子陣列中的內容必須是原陣列內容中的一個連續片段,長度不唯一,子陣列中每個元素相加的結果稱為子陣列的和,現要求找出和最大的一個子陣列。

具體演算法如下:

方法一(最優演算法):分治法

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]+"  ");
        
        
    }

}