zoukankan      html  css  js  c++  java
  • 53. 最大子序和

    题目描述查看:https://leetcode-cn.com/problems/maximum-subarray/

      题目的意思是,给定一个数组,从这个数组里找子序列的最大值。

    • 思路

    可以把整个问题做个拆分,拆分成求前n-1个序列的最大子序列的值。

    把问题规模缩小到n=4,数列为[-2,1,-3,4]

    序列的所有可能如下:

    以-2结尾序列,{-2} max=-2

    以1结尾序列,{-2,1},{1} max=1

    以-3结尾序列,{-2,1,-3},{1,-3},{-3} max=-2

    以4结尾序列,{-2,1,-3,4},{1,-3,4},{-3,4},{4} max=4

    最后的结果就是比较以第i个数结尾的序列中,哪个最大,得到{4}。

    这样就找到了子问题,原问题转换为以nums[n]结尾的序列的最大子序列。

    设dp[i]为以n结尾的序列的最大子序列。

    初始条件dp[0] = nums[0]

                    if(dp[i-1] > 0){
                        dp[i] = nums[i] + dp[i-1];
                    }else{
                        dp[i] = nums[i];
                    }
    • 代码

     1     public int maxSubArray(int[] nums) {
     2         int dp[] = new int[nums.length];
     3         dp[0] = nums[0];
     4         for (int i = 1; i < dp.length; i++) {
     5                 if(dp[i-1] > 0){
     6                     dp[i] = nums[i] + dp[i-1];
     7                 }else{
     8                     dp[i] = nums[i];
     9                 }
    10         }
    11         int max = dp[0];
    12         for (int x: dp
    13              ) {
    14             max = Math.max(max,x);
    15         }
    16         return max;
    17     }
  • 相关阅读:
    my first android test
    VVVVVVVVVV
    my first android test
    my first android test
    my first android test
    ini文件
    ZZZZ
    Standard Exception Classes in Python 1.5
    Python Module of the Week Python Module of the Week
    my first android test
  • 原文地址:https://www.cnblogs.com/vshen999/p/12637565.html
Copyright © 2011-2022 走看看