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

    给定一个整数数组 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

     对于面试题目,一般面试官希望看到的结果都不是暴力法,哪怕是一个dfs剪枝,也要比暴力法好。

    这道题目应该使用动态规划来求解,让我们再来分析一下这个问题。

    在这个问题中,我们发现,如果我们从前向后遍历数组,一个子数组的下一个元素是正数,那么加入这个元素一定是更好的方案。

    如果小于零,那么加入这个元素后的子数组一定不如之前的子数组,之前的子数组就是一个局部最优解。

    在整个过程中,我们去比较局部最优解中的最大值,就可以得到最优的子数组。

    class Solution {
        public int maxSubArray(int[] nums) {
            // dp[i] 表示以nums[i]结尾的最大和
            int[] dp = new int[nums.length];
            dp[0] = nums[0];
            int res = dp[0];
            for (int i = 1; i <nums.length ; i++) {
                dp[i] = dp[i-1]>0 ? dp[i-1]+nums[i] : nums[i];
                res = Math.max(res,dp[i]);
            }
            return res;
    
        }
    }
    
    
  • 相关阅读:
    1007 Maximum Subsequence Sum(25 分)
    1006 Sign In and Sign Out(25 分)
    1005 Spell It Right
    1004 Counting Leaves
    Struts10分钟入门
    MyBais入门
    Hibernate注解
    save,flush,evict
    HQL连接查询
    Hibernate-延迟加载和立即加载
  • 原文地址:https://www.cnblogs.com/kpwong/p/14648883.html
Copyright © 2011-2022 走看看