LeetCode 53.最大子序和

本文介绍了一种求解最大子数组和问题的有效方法——动态规划。通过设置dp数组跟踪最大值并用变量res记录全局最大值,实现了一次遍历即可找出具有最大和的连续子数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

思路:

动态规划
  • 这道题很明显可以使用动态规划来做,可以设置一个数组dp[],每个位置的值保存的是当前情况下的最大值
  • 设置一个变量res存储最终结果,每次遍历一个数,如果dp[i-1]>0,那么就将当前位置的dp[i] = dp[i - 1] + nums[i],否则dp[i] = nums[i],每次比较之后更新res'的值,最后返回结果即可

以下为代码+注释:


	public int maxSubArray(int[] nums) {
        //  动态规划
        // 定义一个dp数组
        int[] dp = new int[nums.length];
        // 初始化首位
        dp[0] = nums[0];
        // 将res变量初始化为第一个值
        int res = dp[0];
        for(int i = 1; i < nums.length; i++){
        // 如果前一个>0说明可以加,增大结果
            if(dp[i - 1] > 0){
                dp[i] = nums[i] + dp[i - 1];
            }else{
            // 否则就不想加
                dp[i] = nums[i];
            }
            // 每遍历一个就更新res
            res = Math.max(res, dp[i]);
        }
        return res;
    }

笔者也在不断学习,如有错误,欢迎指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值