全局文档编号:1452java
一个朋友问了我这样一个问题:给定一个整数数组(有正数有负数),例如{-2,1,-3,4,-1,2,1,-5,4},找出总和最大的连续数列,并返回总和。以为挺有意思,写代码实现了一下。数组
相似于逛街买衣服,咱们有明确的目标(例如:7分牛仔裤,类比于连续数列和最大),而后一家店一家店比价,比完价格最低的下单完事。code
/** * @author wangyao * @date 2020-5-11 13:54 * @description: */ public class ArrayTest { public static void main(String[] args) { /** * 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。 * 示例: * 输入: [-2,1,-3,4,-1,2,1,-5,4] * 输出: 6 * 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 */ int left = 0, right = 0, maxCount = 0, preLeft, preRight, preMaxCount = 0; Integer[] a = {-2,1,-3,4,-1,2,1,-5,4}; Integer[] targetArray = {}; for (int i = 0; i < a.length; i++) { for (int j = i; j < a.length; j++ ) { preLeft = i; preRight = j; Integer[] childArray = Arrays.copyOfRange(a, i , j); preMaxCount = Arrays.asList(childArray).stream().mapToInt(value -> value).sum(); if (preMaxCount > maxCount) { left = preLeft; right = preRight; maxCount = preMaxCount; targetArray = childArray; } } } System.out.println(left + "," + (right-1)); System.out.print("符合条件的连续子数组为:"); Arrays.asList(targetArray).stream().forEach(integer -> System.out.print(integer.intValue() + ",")); System.out.print("最大值" + maxCount); } }