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

[LeetCode]剑指 Offer 42. 连续子数组的最大和

输入一个整型数组,数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。

要求时间复杂度为O(n)。

示例1:

输入: nums = [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

提示:

  • 1 <= arr.length <= 10^5
  • -100 <= arr[i] <= 100

题解:

动态规划解析:

  1. 状态定义: 设动态规划列表 dp ,dp[i] 代表以元素 nums[i] 为结尾的连续子数组最大和。

    • 为何定义最大和 dp[i] 中必须包含元素 nums[i] :因为需要保证 dp[i] 递推到 dp[i+1] 的正确性,如果不包含 nums[i] ,递推时则不满足题目的连续子数组要求。
  2. 转移方程: 若 dp[i−1] ≤ 0 ,说明 dp[i−1] 对 dp[i] 产生负贡献,即 dp[i−1] + nums[i] 还不如 nums[i] 本身大。

    • 当 dp[i−1] > 0 时:执行 dp[i] = dp[i−1] + nums[i] ;
    • 当 dp[i−1] ≤ 0 时:执行 dp[i] = nums[i] ;
  3. 初始状态: dp[0] = nums[0],即以 nums[0] 结尾的连续子数组最大和为 nums[0] 。

  4. 返回值: 返回 dp 列表中的最大值,代表全局最大值。

在这里插入图片描述

	/**
     * 剑指 Offer 42. 连续子数组的最大和
     */
    public int maxSubArray(int[] nums) {
        int res = nums[0];
        for (int i = 1; i < nums.length; i++) {
            // 当 dp[i−1] > 0 时:执行 dp[i] = dp[i−1] + nums[i]
            // 当 dp[i−1] ≤ 0 时:执行 dp[i] = nums[i]
            nums[i] += Math.max(nums[i - 1], 0);
            res = Math.max(res, nums[i]);
        }
        return res;
    }

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/lian-xu-zi-shu-zu-de-zui-da-he-lcof

相关文章:

  • SpringBoot开启异步多线程
  • 计算机毕业设计ssm企业员工培训管理系统2q63c系统+程序+源码+lw+远程部署
  • C语言-手写Map(数组+链表+红黑树)(全功能)
  • 雅思写作课程 band 7+1
  • 人工智能畅想——《人工智能简史》读后感
  • Python 和 Selenium – 用于数据科学的爬虫教程
  • 在虚拟机上使用SoftRoCE部署SPDK NVMe-oF
  • ListMap集合
  • 分享一个查题公众号系统平台 好用且简单
  • WebWall-10.Over Permisson(越权漏洞)
  • 搜题系统平台 公众号查题必用
  • Linux(七)DNS域名解析服务器学习
  • c++基础(八)——静态成员
  • 【手把手带你学JavaSE系列】练习项目—图书管理系统
  • iptables实战
  • github从入门到放弃(1)
  • javascript 哈希表
  • JavaScript函数式编程(一)
  • Mysql优化
  • python_bomb----数据类型总结
  • Spring Cloud中负载均衡器概览
  • Spring-boot 启动时碰到的错误
  • vue:响应原理
  • vue总结
  • 分布式熔断降级平台aegis
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 解决iview多表头动态更改列元素发生的错误
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 前端工程化(Gulp、Webpack)-webpack
  • 前端面试题总结
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 学习笔记TF060:图像语音结合,看图说话
  • postgresql行列转换函数
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (06)金属布线——为半导体注入生命的连接
  • (arch)linux 转换文件编码格式
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (solr系列:一)使用tomcat部署solr服务
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (算法)Travel Information Center
  • (一)Dubbo快速入门、介绍、使用
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net 获取url的方法
  • .NET委托:一个关于C#的睡前故事
  • @SuppressWarnings(unchecked)代码的作用
  • [ C++ ] STL_list 使用及其模拟实现
  • [ 数据结构 - C++] AVL树原理及实现
  • []C/C++读取串口接收到的数据程序
  • [AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗
  • [ajaxupload] - 上传文件同时附件参数值