LeetCode-探索-初级算法-动态规划-3. 最大子序和(个人做题记录,不是习题讲解)

50 篇文章 0 订阅
50 篇文章 0 订阅
LeetCode-探索-初级算法-动态规划-3. 最大子序和(个人做题记录,不是习题讲解)

LeetCode探索-初级算法:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/

  1. 最大子序和
  • 语言:java

  • 思路:试图用一次for循环做出来(动态规划的方式),然而失败了。

  • 参考代码1(1ms):用到的辅助空间小,如果当前得到的数组和 < 0,那么负数+负数肯定更小,直接当前最大和就是本身,如果原本数组和 > 0,则继续加上当前值,继续判断。

    https://blog.csdn.net/weixin_41876155/article/details/80036893

    class Solution {
             public int maxSubArray(int[] nums) {// 动态规划法
                 int sum=nums[0];
                 int n=nums[0];
                 for(int i=1;i<nums.length;i++) {
                     if(n>0)n+=nums[i];
                     else n=nums[i];
                     if(sum<n)sum=n;
                 }
                 return sum;
             }
         }
    
  • 参考代码2(1ms):每次子数组的和都是尽量取最大值,即当前+下一个和单纯下一个,哪个比较大就用哪一个当最大值。

    import java.lang.Math;
    class Solution {
        public int maxSubArray(int[] nums) {
            if(nums.length == 0){
                return 0;
            }
            int max = nums[0];
            int[] res = new int[nums.length];
            res[0] = nums[0];
            for(int i=1; i<nums.length; ++i){
                res[i] = Math.max(res[i-1] + nums[i], nums[i]);
                if(max < res[i]){
                    max = res[i];
                }
            }
            return max;
        }
    }
    
  • 参考后重写(1ms):

    class Solution {
        public int maxSubArray(int[] nums) {
            int sum = nums[0];//表示可能是最大和的连续子数组的和
            int max = nums[0];//最大和
            for(int i = 1; i < nums.length; ++i){
                if(sum > 0)
                    sum += nums[i];
                else
                    sum = nums[i];
                if(max < sum)
                    max = sum;
            }
            return max;
        }
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值