LeetCode-53-最大子数组和-贪心算法

贪心算法理论基础:
局部最优推全局最优
贪心无套路~
没有什么规律~
重点:每个阶段的局部最优是什么?

题目描述:
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。

在这里插入图片描述

解题思路:贪心算法,详细思路在注释中有~

代码实现:文章来源地址https://uudwc.com/A/LmGnE

class Solution {
    /**
     * 解题思路:贪心算法:当 加上一个数发现比当前连续和(sum)要小的时候直接舍掉,就从下一个正数重新开始计算
     * 注意:连续和是负数的时候丢弃,而不是遇到负数就丢弃
     * 暴力法:时间复杂度 O(n^2)
     * 贪心算法:时间复杂度 O(n)
     */
    public int maxSubArray(int[] nums) {
        int len = nums.length;
        int sum = 0;// 连续和
        int maxSubSum = Integer.MIN_VALUE;// 最大连续和
        for (int i = 0; i < len; i++) {
            sum += nums[i];
            if (sum > maxSubSum){
                maxSubSum = sum;
            }
            if (sum < 0){
                sum = 0;// 更新 sum=0
            }
        }
        return maxSubSum;
    }
}

原文地址:https://blog.csdn.net/Miss_croal/article/details/132590754

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年08月31日 11:13
从过滤器初识责任链设计模式
下一篇 2023年08月31日 11:13