標籤:
設計思路:
一個數組首尾相接來找和最大的子數組,我認為就是尋找一個能產生和最大子數組的一種數組的最大排列,即去掉最小的負數。若數組中都是正數,所有數相加就能和最大,若數組中有負數,則去掉最小的負數,在剩下的子數組中找一個和最大的子數組。去掉最小負數的方法就是遍曆數組,找到最小值,把其放在數組的首位或者是末位就可以了。
原始碼:
import java.util.*;public class ArrayMax { public static void main(String args[]) { Scanner input = new Scanner(System.in); System.out.print("請輸入數組的長度:"); int n = input.nextInt(); int data[] = new int[n]; int array[] = new int[n]; System.out.print("請輸入數組:"); for(int i=0;i<n;i++) { data[i] = input.nextInt(); } int sum = 0; int min = data[0]; int number = 0; for(int i=0;i<n;i++) { if(min>data[i]) { min = data[i]; number = i; } } for(int i=number;i<n;i++) { array[i-number] = data[i]; } for(int i=0;i<number;i++) { array[i+n-number] = data[i]; } int max = min; for(int i=0;i<n;i++) { sum = sum + array[i]; if(sum>max) { max = sum; } if(sum<0) { sum = 0; } } System.out.println("所有子數組的和的最大值為:"+max); }}View Code
結果:
軟體工程個人作業05