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     }
  • 相关阅读:
    开源交易所源码搜集
    域名
    国外大牛博客
    Fomo3D代码分析以及漏洞攻击演示
    Small组件化重构安卓项目
    html span和div的区别
    七牛云
    以太坊钱包安全性保证
    跨域问题
    checkout 到bit/master分支
  • 原文地址:https://www.cnblogs.com/vshen999/p/12637565.html
Copyright © 2011-2022 走看看