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;
    
        }
    }
    
    
  • 相关阅读:
    清空数据库所有表数据
    sqlserver编号
    Inherits、CodeFile、CodeBehind的区别
    初识NuGet
    ASP.Net各个命名空间及作用
    SQL SERVER数据库性能优化之SQL语句篇
    Exercise 20: Functions And Files
    Exercise 19: Functions And Variables
    Exercise 18: Names, Variables, Code, Functions
    Exercise 17: More Files
  • 原文地址:https://www.cnblogs.com/kpwong/p/14648883.html
Copyright © 2011-2022 走看看