• 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;
    
        }
    }
    
    
  • 相关阅读:
    Jena学习笔记(2)——利用数据库保存本体
    在Jena框架下基于MySQL数据库实现本体的存取操作
    推荐系统数据稀疏性问题
    基于协同过滤的推荐系统
    机器学习相关——协同过滤
    学习进度条十五(第16周)
    梦断代码阅读笔记三
    梦断代码阅读笔记二
    数组最大值
    梦断代码阅读笔记一
  • 原文地址:https://www.cnblogs.com/kpwong/p/14648883.html
Copyright © 2020-2023  润新知