当前位置: 首页 > article >正文

力扣52-最大子序和(java详细题解)

题目链接:https://leetcode.cn/problems/maximum-subarray/description/

前情提要:

因为本人最近都来刷贪心类的题目所以该题就默认用贪心方法来做。

贪心方法:局部最优推出全局最优。

如果一个题你觉得可以用局部最优推出全局最优,并且没有反例来反驳的话就可以用贪心来试试。

题目思路:

我们首先要找出局部最优。

该题是求最大的子数组和。

我们怎么知道他是最大的呢?

如果一个和它是负数,它加上另一个数,只会让这个数变的更小。

这显然是不行的,我们要求最大的子序和,并且这个子序是连续的。

所以当一个连续和为负数时,我们应该直接放弃前面的连续和,找下一个值。

但是这里要想一个极端状况,如果数组给的值全是负数,那么我们找最小的负数即可。

本题局部最优:当一个连续和为负数时,我们应该直接放弃前面的连续和,找下一个值。

全局最优,选取最大的连续和。

具体代码还有一些细节,我放在代码里面讲。

最终代码:

class Solution {
    public int maxSubArray(int[] nums) {
        //这里result必须是记录最小值 如果初始化为0,碰巧该数组全为负数,那么就不会更新result了。
        int result = Integer.MIN_VALUE;
        //sum记录连续和
        int sum = 0;
        //遍历每一个数
        for(int i = 0;i < nums.length;i ++){
            sum += nums[i];
            //result用来更新最大值
            if(sum > result)result = sum;
            //如果连续和为负数 那么后面加的数就会让后面的数更小
            //所以我们直接跳过负数的连续和,让下一个数作为连续和的开头 确定我们这个数组的起始位置
            //终止位置怎么确定 我们用result常量用来记录每次连续和加上的最大值 也就间接确认这个数组的起始位置了
            if(sum < 0){
                //当连续和为负数时,直接在本层循环值赋为0,那么下一层循环sum就等于他本身,也就到达下一数了
                sum = 0;
            }   
        }
        return result;
    }
}

这一篇博客就到这了,如果你有什么疑问和想法可以打在评论区,或者私信我。

我很乐意为你解答。那么我们下篇再见!


http://www.kler.cn/news/284337.html

相关文章:

  • AI产品经理系列:如何应对AI时代?
  • 设置 Nginx、MySQL 日志轮询
  • Java-树形图工具类TreeUtil
  • 网通产品硬件设计工程师:百兆超薄网络隔离变压器您知道的有多少呢?
  • 【PyCharm激活码】2024年最新pycharm专业版激活码+安装教程!
  • 【Android】使用 ADB 查看 Android 设备的 CPU 使用率
  • 项目技巧二
  • R语言股价跳跃点识别:隐马尔可夫hmm和 GARCH-Jump对sp500金融时间序列分析
  • “添加”业务功能开发
  • Qt 杨帆起航
  • 【分布式定时任务】XXL-JOB_2.4.1部署与实战
  • 解决Element-ui中Table表格里的show-overflow-tooltip不兼容safari浏览器问题
  • vue-admin-template pan版使用方法
  • 【秋招笔试】8.24阿里控股秋招(研发岗)-三语言题解
  • 使用极狐GitLab进行K3S集群的维护与控制
  • 进程间通信--IPC机制
  • 【技术解析】Spring Boot异步机制:实现高吞吐量的最佳实践
  • 【零知识证明】构建第一个zk
  • 95.WEB渗透测试-信息收集-Google语法(9)
  • RN开发问题
  • 线性表之数组
  • 数据结构-单链表-详解-2
  • 彩漩科技亮相第一届人工智能教育应用论坛,荣获AI教育科技产品TOP30奖项
  • 数字化转型升级探索(一)
  • 【奇某信-注册_登录安全分析报告】
  • 鸿蒙高级开发者认证题库(2)
  • RKNPU2从入门到实践 --- 【4】RKNN 模型构建【使用pycharm一步一步搭建RKNN模型】
  • GO Date数据处理
  • Python知识点:如何使用Selenium进行自动化Web测试
  • python-矩阵交换行