设计思路:
一个数组首尾相接来找和最大的子数组,我认为就是寻找一个能产生和最大子数组的一种数组的最大排列,即去掉最小的负数。若数组中都是正数,所有数相加就能和最大,若数组中有负数,则去掉最小的负数,在剩下的子数组中找一个和最大的子数组。去掉最小负数的方法就是遍历数组,找到最小值,把其放在数组的首位或者是末位就可以了。
源代码:
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); } }
结果截图:
时间: 2024-11-18 21:35:35