全局文檔編號: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); } }