目錄
題目
思路
代碼
題目
給你一個整數數組?nums
?,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。
子數組是數組中的一個連續部分。
示例 1:
輸入:nums = [-2,1,-3,4,-1,2,1,-5,4] 輸出:6 解釋:連續子數組?[4,-1,2,1] 的和最大,為?6 。
示例 2:
輸入:nums = [1] 輸出:1
示例 3:
輸入:nums = [5,4,-1,7,8] 輸出:23
提示:
1 <= nums.length <= 105
-104 <= nums[i] <= 104
思路
記錄和,遍歷,一旦和變成負數,他會使得后面要加的那個數字變小,所以思路是一旦和變成負數,就舍棄他們,從下一個數字開始計算。不是遇到負數就舍棄他!!!!
局部最優的情況下,并記錄最大的“連續和”,可以推出全局最優。
實時更新最后的結果,哪個大保留哪個
代碼
class Solution {public int maxSubArray(int[] nums) {int sum = Integer.MIN_VALUE;int count=0;for(int i=0;i<nums.length;i++){count+=nums[i];sum = Math.max(sum, count);//這行和下一行不可以交換順序,因為下一行改變了count的取值,從而會影響到這一行if(count<0){count=0;}}return sum;}}