返回一个整数数组中最大子数组的和
要求:
输入一个整形数组,数组里有正数也有负数。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。
求所有子数组的和的最大值。要求时间复杂度为O(n)
思路:我的思路是定义一个方法,在这个方法中对子数组求和,最后返回最大值。在主方法中对数组的数值类型、数组长度、数组中数值的个数进行限制。
下面是我的一个简易版,程序运行之后会直接显示出子数组和的最大值
public class Test2 { public static void main(String[] args) { int[] array = {8,21,-2,5,4,-9,10}; int b = getMax(array); System.out.println(b); } static int getMax(int[] a){ int max = 0; int sum = 0; for (int i = 0; i < a.length; i++) { sum += a[i]; if(sum <= 0){ sum = 0; } if(sum > 0){ max = sum; } } return max; }
}
运行结果:
下面这个是我做的完整版的,新加了一个功能,数组的值不能输入小数
import java.util.InputMismatchException; import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("请输入数组长度:"); int len = sc.nextInt(); int[] array = new int[len]; System.out.print("请输入数组:"); for (int i = 0; i < len; i++) { try{ array[i] = sc.nextInt(); }catch (InputMismatchException e){//判断数组值是否为整数,如果不是,直接抛出异常 System.out.println("输入错误!"); } } int max = Getmax(array); System.out.println("子数组最大值:"+max); } public static int Getmax(int[] a){ int sum = 0; int max = 0; for (int i = 0; i < a.length; i++) { sum += a[i]; if(sum <= 0){ sum = 0; } if(sum > 0){ max = sum; } } return max; } }
运行结果:
如果不想重复执行操作的话,可以在代码中加入while或者do...while循环
如果有什么不足的地方,请大家帮忙指出。
注:这个东西虽然不难,但是最重要的是里面的逻辑思维!!!