53. Maximum Subarray最大子数组和

最大子串和问题(Maximum Subarray) 又一个经典问题,对于一个包含负值的数字串array[1...n],要找到他的一个子串array[i...j](0 这里我们需要注意子串和子序列之间的区别。子串是指数组中连续的若干个元素,而子序列只要求各元素的顺序与其在数组中一致,而没有连续的要求。对于一个元素数为n的数组,其含 阅读详情

Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

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

A subarray is a contiguous part of an array.

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

Example 1:示例 1:

Input: nums = [-2,1,-3,4,-1,2,1,-5,4]
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.


Example 2:示例 2:

Input: nums = [1]
Output: 1


Example 3:示例 3:

Input: nums = [5,4,-1,7,8]
Output: 23
 

Constraints:提示:

1 <= nums.length <= 10^{5}
-10^{4} <= nums[i] <= 10^{4}

 

Follow up: If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.

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

C语言(超出时间限制)

int maxSubArray(int* nums, int numsSize){
    int max=-10000,temp;
    for(int i=0;i<numsSize;i++)
    {
        temp=nums[i];
        if(max<nums[i])
        {
            max=nums[i];
        }
        for(int j=i+1;j<numsSize;j++)
        {
            temp+=nums[j];
            if(max<temp)
            {
                max=temp;
            }
        }

    }
    return max;
}

C语言:

int maxSubArray(int* nums, int numsSize){
    int cur=nums[0];
    int max=nums[0];
    for(int i=1;i<numsSize;i++)
    {
        if(cur+nums[i]>nums[i])
        {
            cur+=nums[i];
        }
        else
        {
            cur=nums[i];
        }
        if(max<cur)
        {
            max=cur;
        }
    }
    return max;
}

执行结果:通过

执行用时:96 ms, 在所有 C 提交中击败了65.95%的用户

内存消耗:11.9 MB, 在所有 C 提交中击败了94.63%的用户

通过测试用例:209 / 209

C语言:

int maxSubArray(int* nums, int numsSize){
    int cur=0;
    int max=INT_MIN;
    for(int i=0;i<numsSize;i++)
    {
        if(cur<=0)
            cur=nums[i];
        else
            cur+=nums[i];
        if(cur>max)
            max=cur;
    }
    return max;
}

执行结果:通过

执行用时:88 ms, 在所有 C 提交中击败了97.43%的用户

内存消耗:12.3 MB, 在所有 C 提交中击败了8.30%的用户

通过测试用例:209 / 209

[Stanford CS217]CUDA中矩阵乘法GEMM优化的最关键点:向量内积和向量外积分别取行和取列 对于矩阵C中的每一个tile,矩阵A与矩阵B中的tile只需要读取一次,这样就可以达到 O(N) 的计算强度。理想情况下性能应当受限于算术吞吐量,确切来说对于一个大型方阵,即 M=N=K ,矩阵乘法的数学操作复杂度为 O(N3) ,而数据量为 O(N2) ,同时计算强度为 N (这里的计算强度可以被理解为同一个数据被重复利用的次数)。GEMM就是指计算 C=A∗B+C ,其中 A 、B和C都是矩阵,A是 M×K 的矩阵,B是 K×N 的矩阵, C是 M×N 的矩阵。这就是向量内积和向量外积的最大区别。 阅读详情

相关推荐

基于Python的手语识别项目(简单版)

总之,看似简单的代码,实则花费了我不少的时间和精力,我曾无数次在深夜的灯光下,与代码为伴,只为了一点点优化,一丝丝提升。让我们一起,以尊重原创的精神,推动编程领域的发展,让这份热爱和技术的力量,照亮更多人的前行之路。模型的建立(---------------本人采用的是开源的asl-alphabet手势识别库,记得放在路径下--------------)current_dir需要根据自己的路径修改!current_dir需要根据自己的路径修改!current_dir需要根据自己的路径修改!

lusen_j的博客 1966

B题 Maximum Subarrays(动态规划)

https://vjudge.net/contest/342638#problem/B 题意 给你一个数列,要你找到K个不相交的区间,使得它们的和最大 思路 这里用动态规划。 dp[i][j]表示我选出i个不相交的区间,并且选取了第j个数字的总和的最大值dp[i][j]表示我选出i个不相交的区间,并且选取了第j个数字的总和的最大值dp[i][j]表示我选出i个不相交的区间,并且选取了第j个数字的总...

Authur_gyc 402

HIDL概述

HIDL背景 Treble 是 Google Android 团队的一项重大项目,意在 Android 操作系统框架在架构方面的一项重大改变,旨在让制造商以更低的成本更轻松、更快速地将设备更新到新版 Android 系统。Android 7.x 及更早版本中没有正式的供应商接口,因此设备制造商必须更新大量 Android 代码才能将设备更新到新版 Android 系统: 图1 Treble ...

u013357557的专栏 2万+

Maximum subarray problem(“最大和子数组”问题)与Kadane’s algorithm

最大和子串:在计算机科学中,最大子数组问题就是在给定一维数组中寻找和最大的连续的子数组,并确定起点索引i,终点索引j和最大和。(该定义翻译自wikipedia)                                                            最直接的方法就是穷举每一个子串计算和:暴力搜索1(Brute force) def findMaxSum(arr...

To_be_thinking的博客 605

车载以太网测试技术解析

在智能汽车与HiL测试领域,高效解析与模拟车载网络通信是开发验证的关键。ZD-Converter 2000以媒体/介质转换器、嗅探器、拦截器、仿真器四合一的颠覆性设计,成为工程师应对复杂车载以太网测试的瑞士军刀。它支持双路车载/标准以太网智能转换、实时通信嗅探、硬件级数据拦截及ECU通信模拟,更通过串口命令实现全参数远程配置,赋能自动化测试流程。本文将深度解析其核心功能与实战应用场景。

Triv2025的博客 1142

从Excel到Power Pivot:构建你的第一个商业智能分析模型

本文详细介绍了如何从Excel升级到Power Pivot,构建你的第一个商业智能分析模型。通过激活Power Pivot功能、导入数据、建立表关系、创建智能度量值以及打造交互式仪表盘,帮助用户高效处理百万行级别的数据,实现数据自动关联和动态分析,大幅提升商业决策效率。

weixin_30629653的博客 255

B - Maximum Subarrays Kattis - maximumsubarrays[动态规划]

题意:给出一个数列,需要找出k个连续字段,让他们的和最大。 题解:动态规划,首先可以假设dp[i][j]dp[i][j]dp[i][j]为加上第j个数字分成i段的最大值,然后存在转移方程 dp[i][j]=max(dp[i][j−1]+a[j],max(dp[i−1][1],dp[i−1][2],…,dp[i−1][j−1])+a[j])dp[i][j] = max(dp[i][j - 1] +...

Zephyr的博客 939

【学习路线】 游戏客户端开发入门到进阶

游戏开发是一个交叉性极强的技术领域,对开发者提出了高维度的要求。作为初学者,不要急于求成,打牢基础、注重原理、勤于实践,你的成长将会非常快速而稳健。希望这份学习路线与书单能为你指明方向,迈出职业开发者的第一步。

hhw_hhw的博客 2127

最大子数组问题 Maximum Subarray

Maximum Subarray: algorithm这个问题我们先看下问题的描述:问题描述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万+

不止于使能:用汇川PLC功能块封装,实现伺服轴状态管理与安全逻辑

本文深入探讨了汇川PLC功能块封装在伺服轴控中的应用,详细介绍了如何通过高级封装技术实现伺服轴的状态管理与安全逻辑。文章涵盖了从基础使能到全生命周期监控的进化,多轴协同的实例化管理策略,以及安全逻辑的防御性编程技巧,为工业自动化领域的工程师提供了实用的解决方案和最佳实践。

weixin_28684825的博客 271

(11)(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs(一)

Ardupilot官网关于《Peripheral Hardware》的翻译 —《(2.2.2) BLHeli32,AM32, and BLHeli_S ESCs》。

无人机开发(开源Ardupilot) 2230

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

本题是“动态规划 + 滑动窗口”的典范问题(Kadane 算法)线性扫描+状态转移,大大提升性能📌。

2501_91641025的博客 497

ABAP 里解构引用操作符 ->* 的使用方法详解

解除引用操作符->*可用于将“类型为REF TO …的引用变量”的值(即该引用所指向内存)取出,从而访问其实际值或内部组件。具体地,若dref是一个“引用变量”,则表达式dref->*代表对该引用进行“解除引用”,使得程序按静态类型将其视为实际类型的值对象。例如,若lr类型声明为,则lr->*表示“将 lr 引用的INT4对象看作INT4类型并访问其值”。注:若 “数据引用变量” 的静态类型是通用类型DATA,则只能在这种上下文中使用->*。

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

LeetCode 53:最大子数组和(Maximum Subarray)

本题是动态规划的经典模板,也是 Kadane 算法的核心应用。它的思路还可以扩展到:最大子数组乘积(LeetCode 152)二维矩阵最大子矩阵和(经典进阶题)股票买卖问题(LeetCode 121, 122, 123 等)

2302_80633404的博客 459

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

leetcode 53 Maximum Subarray (求最大子数组的和)

题目要求 给定一个整数数组nums,找到具有最大和的连续子数组(包含至少一个数字)并返回其和。 示例 Input: [-2,1,-3,4,-1,2,1,-5,4], Output: 6 Explanation: [4,-1,2,1] has the largest sum = 6. 思路方法 暴力遍历法是最容易想到的,但是由于时间消耗太高,所以就不介绍了。在这里推荐一种此类问题总常用的方法:...

爱喝舒化奶的博客 663

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

LeetCode : 53. Maximum Subarray 最大子数组和

试题 Given an integer array nums, 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...

心之所向 247

IDEA的使用指南

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

[leetcode]53. Maximum Subarray最大子数组和

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 Explan...

weixin_30617737的博客 155

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

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

大树先生的博客 2153

【LeetCode 面试经典150题】 53. Maximum Subarray 最大子数组和

nums。

qq_43513394的博客 657

【LeetCode 53】最大子数组和(Maximum Subarray)题解

本文探讨了求解数组中最大连续子数组和的问题。通过动态规划(Kadane算法)实现高效解法:维护当前子数组和currSum,若为负则重置,否则累加当前元素;同时记录全局最大值maxSum。该算法时间复杂度O(n),空间复杂度O(1)。文章还提到分治法作为进阶方案,但Kadane算法更实用高效。示例代码展示了C语言实现,验证了算法的正确性。该问题是动态规划的经典应用,重点在于理解"当前和为负则重置"的核心思想。

2302_80441878的博客 176

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

Java详解LeetCode 热题 100(13):LeetCode 53:最大子数组和(Maximum Subarray)详解

最大子数组和问题是一个经典的算法问题,有多种解法,其中Kadane算法是最优解。这个问题不仅考察了你对基本算法的理解,还测试了你处理边界情况和优化算法的能力。

yk_dflkg的博客 1509

LeetCode53.Maximum-Subarray<最大子数组和>

题目:思路:这题不会啊...然后发现题解如此简单,逐层判断.得到最大值.每次取得当前的最大值.并且更新结果最大值,结果循环扫描后得到结果。

Eminste的博客 263

leetcode 53. Maximum Subarray 最大子数组和(中等)

定义一个max保存遍历过程中出现的最大子数组和,也是返回结果,定义一个dp[i],用来表示以第i个元素为结尾的数组的最大数组和。

ln_ydc的专栏 309

LeetCode 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,2,1,-5,4], the contiguous subarray [4,-1...

andersonxie的博客 218

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

题目:求一个数组的连续子数组的和,该连续子数组之和最大。

小仙女的博客 271
上一篇: 12. Integer to Roman整数转罗马数字
下一篇: 特殊的类——集合与泛型(C#)
DXB2021
博客等级 码龄5年 307粉丝 289原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值