课堂练习三
返回一个整数数组中最大子数组的和
设计思路:只能遍历一周,设置一个当前最大值curMax和一个最大和Max,设置for循环进行遍历,当当前最大值大于等于0则继续累加,如果小于等于0则重置,到最后比较当前最大值和最大和,最后输出最大和。
出现的问题:最大值初始不能设置为0。
可能的解决方案:初始设置为最小整数min_value.
源代码:
package test1; import java.util.Scanner; public class Test { public static void main(String[] args) { int[] list =new int[100]; int length; Scanner input =new Scanner(System.in); System.out.println("请输入数组的长度:"); length = input.nextInt(); if(length<=0) { System.out.println("未输入数!"); } else { System.out.println("请输入数!"); for(int i=0;i<length;i++) { list[i]=input.nextInt(); } } input.close(); // 记录最大的子数组和,开始时是最小的整数 int max = Integer.MIN_VALUE; // 当前的和 int curMax = list[0]; // 数组遍历 for (int i=0;i<length;i++) { // 如果当前和小于等于0,就重新设置当前和 if (curMax <= 0) { curMax = list[i]; } // 如果当前和大于0,累加当前和 else { curMax += list[i]; } // 更新记录到的最在的子数组和 if (max < curMax) { max = curMax; } } System.out.println("最大的子数组和:"+max); } }
结果截图:
总结:这个题目一开始听到确实一点头绪没有,或许是根本就没理解题目,不过在看了那么生动的演示后,大致懂了,回来试了一下,还是挺简单的,很好实现啊。