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

LeetCode53. 最大子数组和(2024秋季每日一题 15)

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

子数组:是数组中的一个连续部分。

示例 1:

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

示例 2:

输入:nums = [1]
输出:1

示例 3:

输入:nums = [5,4,-1,7,8]
输出:23

提示:

1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
− 1 0 4 < = n u m s [ i ] < = 1 0 4 -10^4 <= nums[i] <= 10^4 104<=nums[i]<=104

进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。


思路:扫描一遍原数组,sum 计算和,初始 为 0,每次加当前元素,每次遍历都求下最大值,当 sum 小于0时,sum 置0,从下个位置重新加。(因为 sum 小于0时,sum 对后面的元素的和是 减少的,所以假如后面的元素的和为 X,肯定有 X > X + sum,所以需要重新计算 sum。

时间复杂度:O(N)

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int n = nums.size(), res = nums[0], sum = 0;
        for(int i = 0; i < n; i++){
            sum += nums[i];
            res = max(res, sum);
            sum = max(0, sum);
        }
        return res;
    }
};

http://www.kler.cn/a/298864.html

相关文章:

  • vue 集成 webrtc-streamer 播放视频流 - 解决阿里云内外网访问视频流问题
  • MySQL 数据库优化详解【Java数据库调优】
  • 增量训练(持续学习)
  • Spring Boot 配置Kafka
  • 如何在K8S集群中查看和操作Pod内的文件?
  • 【Spring】Spring框架之-AOP
  • 基于UDP的简易网络通信程序
  • Shell入门
  • Flutter集成Firebase中的Remote Config
  • Ai+若依(集成easyexcel实现excel表格增强)
  • Sky Takeaway
  • WEBSERVER完整体系
  • Java 创建对象方法的演变
  • ARM----时钟
  • Mybatis--SqlSessionFactory 、SqlSession
  • Java并发复习
  • 文案改写工具有哪些?5款智能改写工具迅速提升文案品质
  • Android11 MTK 安装apk时进行密码验证
  • 经验笔记:SQL调优
  • Java 入门指南:Java 并发编程 —— Copy-On-Write 写时复制技术
  • ElasticSearch的DSL查询④(DSL查询、RestClient的DSL查询)
  • Linux内核 -- 内存管理之 lru_cache_add_inactive_or_unevictable 函数
  • go切片的深入学习以及context库的使用
  • 一道迭代器失效练习题
  • SparkSQL FUNCTION相关操作
  • 基于Spring Boot的小区物业管理系统