【LeetCode 每日一题】53. 最大子数组和

news2025/8/3 6:46:31

01 题目描述

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

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

02 示例

 示例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 <= 10^5
  • -10^4 <= nums[i] <= 10^4

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

03 C++代码

 方法一:动态规划

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        // 动态规划思路
        int pre = 0, max_Ans = nums[0];
        // 其中pre这个变量用来维护对于当前f(i)的f(i-1)的值是多少,最终的空间复杂度降到了O(1).
        for (const auto x: nums){
            pre = max (pre + x, x);
            max_Ans = max(max_Ans, pre);
        }
        return max_Ans;
    }
};

复杂度分析:

  • 时间复杂度:O(N),其中N是nums数组的长度。我们只需要遍历一遍数组即可求得答案。
  • 空间复杂度:O(1)。 

方法二:分治法  五大常用算法之一:分治算法 - 红脸书生 - 博客园

分治策略是:对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解。这种算法设计策略叫做分治法。

class Solution {
public:
    struct Status{
        int lSum, rSum, mSum, iSum;
    };

    Status pushUp(Status l, Status r){
        int iSum = l.iSum + r.iSum;
        int lSum = max(l.lSum, l.iSum + r.lSum);
        int rSum = max(r.rSum, r.iSum + l.rSum);
        int mSum = max(max(l.mSum, r.mSum), l.rSum + r.lSum);
        return (Status) {lSum, rSum, mSum, iSum};
    };

    Status get(vector<int> &a, int l, int r) {
        if(l == r){
            return (Status) {a[l], a[l], a[l], a[l]};
        }
        int m = (l + r) >> 1;
        Status lSub = get(a, l, m);
        Status rSub = get(a, m + 1, r);
        return pushUp(lSub, rSub);
    }

    int maxSubArray(vector<int>& nums) {
        return get(nums, 0, nums.size() - 1).mSum;
    }
};

复杂度分析:

假设序列a的长度为n。

  • 时间复杂度:假设我们把递归的过程看作是一颗二叉树的先序遍历,那么这颗二叉树的深度的渐进上界为O(logn),这里的总时间相当于遍历这颗二叉树的所有节点,故总时间的渐进上界是O(\sum_{i=1}^{logn} 2^{i-1}) = O(n),故渐进时间复杂度为O(n)。
  • 空间复杂度:递归会使用O(logn)的栈空间,故渐进空间复杂度为O(logn)。

04 一点感想

        真的难吗(我也不知道),加油鸭

05 刷题进度

 

学习目标:坚持刷题 坚持刷题 坚持刷题!!! 

那写看似毫无波澜的日复一日,会在某一天 让你突然发现努力的意义。
无悔昨天 & 感谢今天 & 喜欢明天~

 一以贯之的努力,不得懈怠的人生。每天的微小积累,会决定最终的结果,这 就是答案!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15932.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从 React 源码彻底搞懂 Ref 的全部 api

ref 是 React 里常用的特性&#xff0c;我们会用它来拿到 dom 的引用。 它一般是这么用的&#xff1a; 函数组件里用 useRef&#xff1a; import React, { useRef, useEffect } from "react";export default function App() {const inputRef useRef();useEffect(…

几乎涵盖了近半年90%的Java面试题,可以肝起来了

前言 很多人在问&#xff1a;八股文还有必要背吗&#xff1f; 近半年来大家听到的、用到的不少&#xff0c;带来的争议也不断。 有人奉为面试神器&#xff0c;全文背诵。有人觉得八股文铺天盖地实际作用不大&#xff0c;还害人不浅… 我觉得不是背不背八股文的问题&#xff0c…

【机器学习并行计算】2 parameter server参数服务器

使用ps实现异步梯度下降。 14年提出的。 异步 vs 同步 可以看出异步运行效率非常高。 异步梯度下降的流程 ps架构流程 worker&#xff1a; 首先从参数服务器拉取最新的参数&#xff1b;然后用自己节点上的数据计算梯度&#xff1b;最后把梯度推给参数服务器参数服务器&#xf…

最快速的文件传输软件,解析镭速文件传输软件

想到每天都需要进行文件传输&#xff0c;就会烦躁&#xff0c;要是有一夸最快速的文件传输软件的话&#xff0c;这样就可以节省大量的时间了&#xff0c;那么针对于用户的这一个需求&#xff0c;我们来介绍一下镭速的文件传输软件&#xff0c;看是否是那么快&#xff0c;快到你…

无监督端到端框架:IVIF

VIF-Net: An Unsupervised Framework for Infrared and Visible Image Fusion &#xff08; VIF-Net: 红外和可见光图像融合的无监督框架&#xff09; &#xff08;本文理解上的难易程度&#xff1a;易&#xff09; 在本文中&#xff0c;我们提出了一种用于红外和可见图像融合…

css 动画实现节流效果

今天在做节流操作时&#xff0c;无意间看到可以用css动画去实现节流效果&#xff0c;然后一顿操作发现果然可以&#xff0c;记录一下 CSS pointer-events 属性 一、 用css中的pointer-events&#xff08;指针事件&#xff09;、animation&#xff08;动画&#xff09;以及:act…

WordPress做缓存Memcached Is Your Friend+Batcache

宝塔面板有两个地方有Memcached,一个是在软件商店的运行环境里面,一个是在php扩展里面,我们先安装PHP扩展中的Memcached ,然后wp后台搜索Memcached Is Your Friend安装插件。WordPress做缓存很给力。缓存命中率保持在 90%以上的WordPress 本地缓存加速方案。 默认我们看到命…

E-Payment Integrator Delphi Edition

E-Payment Integrator Delphi Edition 通过为组件提供处理信用卡和电子支票交易的直观界面&#xff0c;减轻了集成电子支付支持的复杂性。开发人员无需学习复杂的套接字编程或安全实现。通过使用电子支付集成器&#xff0c;开发人员能够针对当前支持的任何支付网关进行定位和开…

比较复杂的策略路由综合实验

下面是网络技能大赛策略这个模块的要求&#xff0c;单独拿出来整理一下 R1、R2、R3间运行OSPF&#xff0c;进程号20&#xff0c;规划单区域&#xff1a;区域0&#xff1b; VSU、R2、R3间运行OSPF&#xff0c;进程号21&#xff0c;规划单区域&#xff1a;区域0&#xff1b; …

JavaScript之事件高级(53rd)

1、注册事件(绑定事件) 给元素添加事件&#xff0c;称为注册事件或者绑定事件。 注册事件有两种方式&#xff1a;传统方式和方法监听注册方式 1、addEventListener事件监听方式 1、eventTarget.addEventListener()方法将指定的监听器注册到 eventTarget&#xff08;目标对…

springMVC异常处理的知识点+异常处理案例

springMVC异常处理的知识点异常处理案例 异常介绍&#xff1a; 我们知道系统中的异常包括两类&#xff1a;预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息&#xff0c;后者主要通过规范代码开发、测试等手段减少运行时异常的发生 在SpringMVC处理异…

有关服务器虚拟化的常见问题解答

虚拟化”一词经常使用&#xff0c;尤其是与服务器相关的时候。以下是一些有关服务器虚拟化常见问题的解答。 什么是服务器虚拟化? 虚拟化是一个经常应用于范围广泛的技术的术语。从本质上讲&#xff0c;虚拟化技术就是使用分布式软件硬件。在服务器虚拟化领域&#xff0c;这意…

Android

直接运行 最新版的 apktool 可以通过brew安装&#xff0c;命令如下 brew install apktool # 验证安装结果apktool -version (Mac)反编译Android APK详细操作指南[ApkTool,dex2jar,JD-GUI] - CrazyCodeBoy的技术博客官网|CrazyCodeBoy|Devio|专注移动技术开发(Android&I…

【计算机网络】广域网协议分析

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录广域网WAN广域网局域网区别PPP协议----链路层------广域网PPP协议组成3个ppp状态图PPP协议帧格式HDLC协议--------链路层------广域网帧格式------无监信PPP协议和HDLC&#x1f343;博主昵称&#xff1a;一拳…

通用Mapper获取数据表中id为0解决方法。千万别瞎改int为integer了

项目场景&#xff1a; 最近准备自己写一个框架。由于是舍弃了成熟框架&#xff0c;所以在集成一些组件的时候&#xff0c;发现了一些之前没有注意过的问题。 这次是集成通用mapper时出现的一个问题。。。 问题描述 使用通用Mapper的selectAll()方法后&#xff0c;得到的id值都…

Java【抽象类和接口】是什么?

文章目录前言一、抽象类1.什么是抽象类2.抽象类的特征3.抽象类的作用二、接口1.什么是接口2.语法规范3.接口的使用4.接口的特征5.实现多个接口6.接口间的继承总结前言 前篇文章分享过了 面向对象语言的三大特征&#xff1a;封装&#xff0c;继承&#xff0c;多态 本篇呢将继续…

LCR表测电容怎么实现连续测试?ATECLOUD云测试平台帮您解决

河南某企业在生产测试中需要用到LCR表测试电容的容量和损耗&#xff0c;目前在使用是德科技E4980a LCR 测试数据时&#xff0c;发现不能连续测试&#xff0c;不能自动记录数据。通过和纳米软件Namisoft沟通&#xff0c;希望我们可以实现连续测试并将测试数据自动记录&#xff0…

steam搬砖项目,当下最稳定长久的

我为什么这么推荐普通人来做CSGO搬砖&#xff0c;最主要的原因就两点&#xff0c;一是平台流量大知道的人少&#xff0c;二就是不需要什么成本&#xff01; CSGO是基于steam衍生出来的&#xff0c;steam的流量池有多大&#xff0c;想必大家都心知肚明&#xff0c; Steam平台是…

实验(一):开发环境的安装及基本操作

一、实验目的与任务 实验目的&#xff1a; 1. 掌握KeilC集成开发环境的安装及基本操作&#xff1b; 2. 掌握Protues仿真软件的安装及基本操作。 任务&#xff1a; 1.完成KeilC集成开发环境的安装&#xff0c;建立工程&#xff1b; 2. 完成Protues仿真软件的安装&#xff0c;建立…

[附源码]java毕业设计票务销售网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…