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

示例:

輸入: [-2,1,-3,4,-1,2,1,-5,4],

輸出: 6

解釋: 連續子數組 [4,-1,2,1] 的和最大,爲 6。

代碼詳解:

public class Solution { 
    
     public int maxSubArray(int[] nums) { 

          int len = nums.length; 

          if (len == 0) {

                return 0; 
          } 


          int[] dp = new int[len]; 

          dp[0] = nums[0]; 

          for (int i = 1; i < len; i++) { 

              dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);

          }


          // 最後這一步,是求一個全局的最優值 
          int res = dp[0]; 

          for (int i = 1; i < len; i++) { 

               res = Math.max(res,dp[i]); } return res; 

           }
 }

算法詳解:

                  解析:dp[i] = Math.max(nums[i], dp[i - 1] + nums[i]);

                  dp[i]      nums[i]     dp[i - 1] + nums[i]

                    1           1                -1

                    -2          -3               -2

                    4            2                4

                    3            -1               3 

                    5            2                5

                    6            1                5

                    ........

通過該條代碼得到前 i 個最大和,存儲到dp[]中,用dp[]數組存儲最大的數組數和,最後遍歷該數組即可得到該數

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章