1. 程式人生 > 資訊 >限時 5 折:愛奇藝 VIP + 蘇寧 SUPER 雙年卡 128 元

限時 5 折:愛奇藝 VIP + 蘇寧 SUPER 雙年卡 128 元

此部落格連結:

最大子序和

題目連結:https://leetcode-cn.com/problems/maximum-subarray/

題目

給定一個整數陣列 nums,找到一個具有最大和的連續子陣列(子陣列最少包含一個元素),返回其最大和。

示例 1:

輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續子陣列[4,-1,2,1] 的和最大,為6 。
示例 2:

輸入:nums = [1]
輸出:1
示例 3:

輸入:nums = [0]
輸出:0
示例 4:

輸入:nums = [-1]
輸出:-1
示例 5:

輸入:nums = [-100000]
輸出:-100000

題解

這題找最大子序和,注意這裡是必須連續的。本題使用動態規劃的思想,設dp表示當前元素能取的最大自序和,那麼怎麼找每個元素到目前為止的最大子序和呢?我們可以這樣想,當我們從前向後找最大的時候,如果前面的元素加上當前值比當前值小,那麼說明前面的就是累贅,我肯定取當前元素為dp的最大值,相反,如果當前元素加上前面的值比當前元素大,那麼說明當前的dp是前面的和加上當前元素作為當前的dp最大值。

程式碼

class Solution {
    public int maxSubArray(int[] nums) {
       if(nums.length==1) 
          return nums[0];
       int dp[]=new int [nums.length];
       dp[0]=nums[0];
       for(int i=1;i<nums.length;i++) 
       {
           if(dp[i-1]+nums[i]<=nums[i])
           {
              dp[i]
=nums[i]; } else{ dp[i]=dp[i-1]+nums[i]; } // System.out.println(dp[i]); } int max=dp[0]; for(int i=0;i<dp.length;i++) { if(dp[i]>max){ max=dp[i]; } } return max; } }

結果

出來混總是要還的