力扣每日一题53:最大子数组和

题目描述:

给你一个整数数组 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 <= nums.length <= 105
  • -104 <= nums[i] <= 104

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

通过次数

1.5M

提交次数

2.8M

通过率

54.9%

思路和题解:(在线处理)

当一个子列的和sum加上后一项a[i]时,只有当sum>0时,后一项加上sum才能增大,才有扩大子列的可能。当sum小于零时,至少它不会将包含后一项a[i]的子序列的和增大,所以我们就直接舍弃。先让max设置为nums[i]的最小值-10^4,sum的初值为零。遍历一次nums数组,每次sum+=mus[i],如果sum<0,就令sum=0,如果sum>max,就令max=sum。最后返回sum。

代码:

复制代码
class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int sum=0;
        int max=-10009;
        for(int i=0;i<nums.size();i++)
        {
            sum+=nums[i];
            if(sum>max)
            {
                max=sum;
            }
            if(sum<0)
            {
                sum=0;
            }
        }
        return max;
    }
};
相关推荐
不知名的忻12 小时前
关键路径(Java)
java·数据结构·算法·关键路径
C雨后彩虹12 小时前
SpringBoot整合Redis String,全套原生API讲解,覆盖80%缓存业务场景
java·数据结构·spring boot·redis·string
大大杰哥12 小时前
2025ccpc南昌补题笔记(前六题)
c++·笔记·算法
手写码匠12 小时前
手写 AI 智能路由系统:从零构建多模型调度与负载均衡
人工智能·深度学习·算法·aigc
sheeta199812 小时前
LeetCode 每日一题笔记 日期:2026.05.14 题目:2784. 检查数组是否是好的
笔记·算法·leetcode
故事还在继续吗12 小时前
DPDK 教程(三):多队列 + RSS + 多 worker 的最小转发 / Echo
算法·哈希算法·dpdk
AI科技星12 小时前
全域数学·体积与表面积通项定理【乖乖数学】
人工智能·算法·数学建模·数据挖掘·机器人
孬甭_12 小时前
顺序表详解
c语言·数据结构
Yingjun Mo12 小时前
1. 在线学习引言
学习·算法
李日灐12 小时前
< 12 > Linux进程:进程虚拟地址空间机制 —— 内存管理的美学
linux·运维·算法