LeetCode-53:Maximum Subarray (和最大的连续子数组)

【Pytorch教程】:卷积神经网络 CNN Pytorch教程目录 Torch and Numpy 变量 (Variable) 激励函数 关系拟合(回归) 区分类型 (分类) 快速搭建法 批训练 加速神经网络训练 Optimizer优化器 卷积神经网络 CNN 目录Pytorch教程目录什么是卷积神经网络 CNN卷积 和 神经网络池化(pooling)流行的 CNN 结构CNN 卷积神经网络MNIST手写数据CNN模型训练可视化训练全部代码 什么是卷积神经网络 CNN 卷积 和 神经网络 卷积神经网络是如何运作的呢, 举一个识别图片的例子, 我们知 阅读详情

Question

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

example:

given the array [-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray [4,-1,2,1] has the largest sum = 6.

问题解析:

在给定数组中找到和最大的连续子数组,子数组至少包含一个元素。

Answer

Solution 1:

DP解决。

  • 首先以本题的例子解释一下:已知数组的前k个元素的和最大子的序列的和为maxSub(每次均比较记录),以及前k个数组的临时和sum。如果添加了第k+1个元素,由于题目中说明是连续子序列这个限制,所以如果k+1这个元素之前的和,也就是sum是小于0的,那么前面的和对于增加的k+1这个元素从而去组成最大子序列是没有贡献的,所以可以直接将sum置0。
  • 如题目中的数组:[-2,1,-3,4,-1,2,1,-5,4],就以前两个元素[-2,1]为例,sum = -2 < 0 ,对于数字1来说,加前面的数组-2只会减小它,所以直接置sum=0,新的sum=0+1=1;对[-2,1,-3,4]来说,子数组[-2,1,-3]经过计算后的临时sum = -2 < 0,对于数字4来说,前面的和只会减小它,所以直接置sum=0,新的sum=0+4=4;
  • 注意,只要sum不减到负数,中间出现小于0的元素是没关系的,sum仍然可以继续累加。
  • 算法:利用动态规划思想,已知0,..,k的最大和以后,0,…k+1的最大和为:
    1)若sum[k]>=0,sum[k+1]=sum[k]+A[k+1];
    2)若sum[k]<0,sum[k+1]=A[k+1]。
class Solution {
    public int maxSubArray(int[] nums) {
        int maxSoFar = nums[0], maxEndingHere = nums[0];
        for (int i = 1; i < nums.length; ++i){
            maxEndingHere = Math.max(maxEndingHere+nums[i], nums[i]);
            maxSoFar = Math.max(maxSoFar, maxEndingHere);   
        }
        return maxSoFar;
    }
}
  • 时间复杂度:O(n),空间复杂度:O(1)
public int maxSubArray(int[] A) {
        int n = A.length;
        int[] dp = new int[n];//dp[i] means the maximum subarray ending with A[i];
        dp[0] = A[0];
        int max = dp[0];

        for(int i = 1; i < n; i++){
            dp[i] = A[i] + (dp[i - 1] > 0 ? dp[i - 1] : 0);
            max = Math.max(max, dp[i]);
        }

        return max;
}
  • 时间复杂度:O(n),空间复杂度:O(n)
Solution 2:

贪心算法。

  • 下面的思想其实和DP是相似的。其从头开始一直保持将数组加入进来,直到sum < 0,则将sum置为0,ans一直保存最大的和。
/*
Idea is very simple. Basically, keep adding each integer to the sequence until the sum drops below 0. If sum is negative, then should reset the sequence.
*/
class Solution {
    public int maxSubArray(int A[], int n) {
        int ans=A[0],i,j,sum=0;
        for(i=0;i<n;i++){
            sum+=A[i];
            ans=max(sum,ans);
            sum=max(sum,0);
        }
        return ans;
    }
}
  • 时间复杂度:O(n),空间复杂度:O(1)
AI视频生成模型训练:从数据准备到部署全流程 咱们这次的目的就像是要建造一座超级厉害的AI视频生成魔法城堡。范围呢,就是从收集建造城堡的材料(数据准备)开始,到把城堡搭建起来(模型训练),再到让城堡能供大家使用(模型部署),涵盖了整个过程的方方面面。接下来我们会先给大家介绍一些重要的术语,就像认识冒险途中的关键道具一样。然后引入一个有趣的故事,带大家进入AI视频生成的奇妙世界,解释核心概念以及它们之间的关系。接着会详细讲解核心算法原理、数学模型和公式,还会有项目实战,带大家亲自体验代码的魅力。 阅读详情

相关推荐

Cursor Agent模式下如何优雅切换conda环境运行Python脚本?3种实用方法实测

本文针对Cursor Agent模式下运行Python脚本时环境错配的痛点,实测了三种优雅切换conda环境的实用方法。通过Shell全局配置、项目级.cursorrc文件定制以及对话中直接指令,开发者可以确保AI助手在正确的虚拟环境中执行代码,从而提升开发效率和协作流畅度。

redis7keeper的博客 595

计算机网络-交换机简介

交换机

Cuienjie的博客 3734

告别理论!手把手教你用Patran/Nastran搞定悬臂翼的颤振分析(附完整模型文件)

本文提供了一份详细的Patran/Nastran悬臂翼颤振分析实战指南,涵盖从几何建模到结果解读的全过程。通过手把手教学和完整模型文件,帮助工程师和学生快速掌握气动弹性分析技术,特别适合需要实际操作的初学者。文章重点介绍了模态分析、气动建模和颤振求解等关键步骤,并提供了常见问题排查和优化建议。

weixin_30879169的博客 492

LeetCode刷题系列 -- 525. 连续数组

0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。[0, 1] 是具有相同数量 0 和 1 的最长连续子数组。的最长连续子数组,并返回该子数组的长度。nums[i] 不是 0 就是 1。, 找到含有相同数量的。

qq_33775774的博客 645

ESP32S3开发实战:从Vscode+IDF环境配置到OpenOCD单步调试全流程

本文详细介绍了ESP32S3开发环境的完整搭建流程,重点讲解如何在Vscode中配置ESP-IDF开发框架,并利用OpenOCD工具实现硬件单步调试。内容涵盖从环境准备、工程创建、代码烧录到高级调试技巧的全方位实战指南,旨在帮助开发者快速掌握ESP32S3的高效开发与调试方法。

weixin_29168813的博客 208

Nginx反向代理HTTPS服务报错排查:The plain HTTP request was sent to HTTPS port

在Web服务架构中,反向代理是连接客户端与后端应用的关键组件,它通过转发请求实现负载均衡和安全隔离。其工作原理涉及监听端口、解析协议头部,并根据配置将请求路由至上游服务器。这一机制的技术价值在于提升系统可扩展性、简化部署,并增强安全性。在HTTPS场景下,代理服务器需正确处理SSL/TLS终止与传递,若配置不当,常引发协议不匹配问题。例如,当Nginx将解密后的HTTP请求转发至期待HTTPS的后端,或客户端直接向SSL端口发送明文请求时,便会出现经典报错“The plain HTTP request wa

weixin_33391446的博客 392

Maximum Subarray(最大连续子数组的和) 解法所思

这道题被LeetCode定位为easy, 如果你一时间没有想到时间复杂度O(n), 空间复杂度O(1)的解法, 去看别人的讨论和解法的话, 就会觉得定义为easy是正确合理的. 分析: 情况1, 原数组全是正数, 那么对数组求和就行了, 最大连续子数组就是原数组本身. 情况2, 原数组全是负数, 那么最大连续子数组是一个空数组, 最大和应该是0. 情况3, 原数组有正有负, 此时, 可以对数组遍...

weixin_42907725的博客 254

openbmc 支持mctp over pcie(三)(支持作为endpoint)

本文介绍了在Intel BHS平台上支持MCTP over PCIe端点开发的调试方法。开发基于CodeConstruct和AspeedTech-BMC的开源项目,将内核驱动改为模块形式以便调试。内容包括DTS配置、驱动模块设置步骤,以及如何将BMC配置为端点设备。调试过程涉及内核模块加载、MCTPD启动、参数设置等关键命令,并展示了路由表、地址和邻居信息的测试结果。该方案仅为实验性工作,需注意停止其他使用/dev/aspeed-mctp0接口的应用。

wit_yuan的专栏 1553

玩了这么久网络,你知道 交换机是属于 物理层 还是 数据链路层?交换机的原理吗?发送数据的转发方式嘛?

交换机 交换机是属于 物理层 还是 数据链路层? 集线器 工作于OSI(开放系统互联参考模型)参考模型第一层,即“物理层” 普通交换机 工作于OSI(开放系统互联参考模型)参考模型第二层,即“数据链路层” 智能交换机 存在工作于第三层和第四层的功能。 集线器因为不对数据包进行处理,而是直接广播的形式将数据包发送给每一个与其相连接的节点,所以是工作在第一层物理层上的。(和交换机最重要...

H_sen's Blog 9318

把 sy-* 带进 ABAP CDS:ABAP 7.50 里的环境信息新姿势($session 与 @Environment.systemField 实战)

摘要:ABAP 7.50在CDS视图中引入两种获取环境信息的方式:1)直接使用$session会话变量读取用户、客户端和系统语言;2)通过@Environment.systemField注解参数,由Open SQL自动注入系统字段。$session方式简单但依赖Open SQL访问路径,非ABAP环境下可能失效;注解参数方案更工程化,依赖关系明确且支持测试。建议ABAP体系内优先使用$session,对外接口采用参数化方案。两种方式各有适用场景,正确选择可避免潜在风险。(148字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 151

Taro React组件使用(5) —— RuiPasswordInput 密码输入框显示隐藏和清空

初始化时,需要将传入的 value 赋值给当前组件的 value, 不能直接修改 props 的 value;在组件内输出组件内的变量时,最好先判断输出函数是否定义,再输出,否则很容易引起报错。

止于至善 891

交换机的分层

接入层是与终端设备直接相连的交换机,主要负责接入用户设备(如PC、IP电话、摄像头、无线接入点等),提供端口的接入和VLAN的划分,实现用户设备的接入和流量的转发。接入层的交换机通常具有较少的端口数,但需要支持多种协议和功能,如802.1X认证、QoS、ACL等。核心层是网络的中心,连接多个汇聚层交换机,主要负责网络的高速转发和路由,保证网络的高可用性和高性能。汇聚层是连接多个接入层交换机的交换机,主要负责汇聚接入层交换机的流量,并将其转发到核心层交换机。交换机的分层一般分为三层:接入层、汇聚层和核心层。

weixin_42116023的博客 4186

全功能爬虫框架:Botasaurus 的详细使用(现代化、反检测、高并发的智能爬虫框架)

Botasaurus是一个基于 Python 的全栈式智能数据采集框架。它深度融合了以下关键技术: 无头浏览器自动化(Headless Browser Automation):基于 Playwright 或 Puppeteer,支持 Chromium、Firefox、WebKit; 高级反检测引擎(Anti-Detection Engine):自动绕过 WebDriver、Canvas、AudioContext 等 50+ 种指纹检测; 声明式任务模型(Declarative Task Model):用装

数据知道的博客 4370

【LeetCode & 剑指offer刷题】分治法题2:42 连续子数组的最大和(53. Maximum Subarray)...

【LeetCode &amp; 剑指offer刷题】分治法题2:42 连续子数组的最大和(53. Maximum Subarray) 【LeetCode &amp; 剑指offer 刷题笔记】目录(持续更新中...) 53. Maximum Subarray Given an integer array nums, find the con...

技术改变世界 550

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode-53 Maximum Subarray 连续子数组的最大和

问题描述: Find the contiguoussubarray within an array (containing at least one number) which has the largestsum. For example, given the array [−2,1,−3,4,−1,2,1,−5,4], the contiguous subarray [4,−1,2,1]

woliuyunyicai的专栏 1912

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Java描述 LeetCode,53. Maximum Subarray,最大连续子数组之和

动态规划,贪心算法,分治,三种方法解决问题

人在江湖 715

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【LeetCode & 剑指offer刷题】动态规划与贪婪法题4:42 连续子数组的最大和(53. Maximum Subarray)...

【LeetCode &amp; 剑指offer刷题】动态规划与贪婪法题4:42 连续子数组的最大和(53. Maximum Subarray) 【LeetCode &amp; 剑指offer 刷题笔记】目录(持续更新中...) 53. Maximum Subarray Given an integer array nums, find th...

技术改变世界 765

LeetCode OJ-53.Maximum Subarray(最大连续子数组和)

LeetCode OJ-53.Maximum Subarray(最大连续子数组和)题目描述 Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [-2,1,-3,4,-1,

oYinGui1 1330

LeetCode 题解之 53. Maximum Subarray(连续子数组的最大和问题)

53. Maximum Subarray(连续子数组的最大和问题) 题目描述和难度 题目描述: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(...

李威威的博客 1万+

LeetCode 53. Maximum Subarray(最大总和连续子数组)

LeetCode 53

Asoul_的博客 126

leetcode53 Maximum Subarray 最大连续子数组

题目要求 Find the contiguous subarray within an array (containing at least one number) which has the largest sum. For example, given the array [-2,1,-3,4,-1,2,1,-5,4], the c...

weixin_33730836的博客 208

【转载】LeetCode-53:Maximum Subarray (和最大的连续子数组)

转自https://blog.youkuaiyun.com/Koala_Tree/article/details/78367481 Question Find the contiguous subarray within an array (containing at least one number) which has the largest sum. example: given the arr...

勤学如春起之苗,不见其增,日有所长! 辍学如磨刀之石,不见其损,日有所亏! 132

leetcode 53. Maximum Subarray DP连续子数组最大和

Given an integer arraynums, find the contiguous subarray(containing at least one number) which has the largest sum and return its sum. Example: Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanati...

salmonwilliam的博客 378

记录Leetcode第九天(53. Maximum Subarray)

记录Leetcode第九天(53. Maximum Subarray) 1. 题目 Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. 2. 例子 Input: [-2,1,-...

qq_42472150的博客 174

【leetcode-Python】-Dynamic Programming -53. Maximum Subarray(最大和连续子数组问题)

题目链接 题目描述 示例 解决思路 这个问题将采用动态规划算法来解决。首先参考《剑指offer》,解答这样一个问题:什么题目可以考虑用动态规划算法去求解。 如果题目满足以下三个特征: 1、求一个问题的最优解(通常是求最大值或最小值); 2、该问题的最优解依赖各个子问题的最优解(子问题的最优解组合起来能够得到整个问题的最优解); 3、该问题能被分解为若干个子问题,这些子问题之间还有相互重叠的更小的子问题 那么我们就可以考虑用动态规划来解决这个问题。 由于子问题会互相重叠,为了避免.

gulaixiangjuejue的博客 280
上一篇: LeetCode-605:Can Place Flowers (可放置花的数量)
下一篇: Google 面试题:最优交易次数
大树先生的博客
博客等级 码龄9年 2692粉丝 200原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值