关于对leetcode53最大子序和的思考

LeetCode.53 最大子序和(python解法) 目录题目solution_1solution_2solution_3参考资料 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 solution_1 思路:遍历法。遍历数组,用onesum去维护当前... 阅读详情

关于对leetcode53最大子序和的思考

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1]
输出:1
示例 3:
输入:nums = [0]
输出:0

示例 4:

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

示例 5:

输入:nums = [-100000]
输出:-100000
提示:
  • 1 <= nums.length <= 3 * 104
  • -105 <= nums[i] <= 105
  • **进阶:**如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的 分治法 求解。

法一:穷举法:数组循环,暴力求解

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
var n =nums.length;
var max=nums[0];
for (var i = 0; i < n; i++) {
    for (var j = i; j < n; j++) {
        var t = 0;
        for (var k = i; k <= j; k++){
            t+=nums[k];
                if(t>max){
                max=t;
                }
            }
		}
        
}
return max;
};

这种穷举法需要用到三重循环,故时间复杂度为O(n3),穷举法还可进行如下优化,使得时间复杂度优化为两重循环的O(n2)

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
var max=nums[0];
var n =nums.length;
for (var i = 0; i < n; i++) {
var t = 0;
    for (var j = i; j < n; j++) {
            t+=nums[j];
                if(t>max){
                max=t;
                }	
            }
		
}
return max;
};

法二:动态规划
在这里插入图片描述

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    var count = new Array();
var n =nums.length;
count[0]=nums[0];

var max=count[0];
for (var i = 1; i < n; i++) {
        if(count[i-1]>0){
        count[i]=count[i-1]+nums[i];
        }else{
            count[i]=nums[i];
        }
        if( count[i]>max){
		max = count[i]
}
}
return max;
};

此解法的时间复杂度为O(n),如需求解最大子序和的起始下标和终点下标,则可用max值从i的位置依次向前作减法,直到值等于0即为起始值。

法三:分之策略,递归求解

/**
 * @param {number[]} nums
 * @param {number} left
 * @param {number} right
 * @param {number} mid
 * @return {number}
 */
function crossSum(nums, left, right, mid) {
    if (left === right) {
        return nums[left];
    }

    let leftMaxSum = Number.MIN_SAFE_INTEGER;
    let leftSum = 0;
    for (let i = mid; i >= left; --i) {
        leftSum += nums[i];
        leftMaxSum = Math.max(leftMaxSum, leftSum);
    }

    let rightMaxSum = Number.MIN_SAFE_INTEGER;
    let rightSum = 0;
    for (let i = mid + 1; i <= right; ++i) {
        rightSum += nums[i];
        rightMaxSum = Math.max(rightMaxSum, rightSum);
    }

    return leftMaxSum + rightMaxSum;
}

/**
 * @param {number[]} nums
 * @param {number} left
 * @param {number} right
 * @return {number}
 */
function __maxSubArray(nums, left, right) {
    if (left === right) {
        return nums[left];
    }

    const mid = Math.floor((left + right) / 2);
    const lsum = __maxSubArray(nums, left, mid);
    const rsum = __maxSubArray(nums, mid + 1, right);
    const cross = crossSum(nums, left, right, mid);

    return Math.max(lsum, rsum, cross);
}

/**
 * @param {number[]} nums
 * @return {number}
 */
var maxSubArray = function(nums) {
    return __maxSubArray(nums, 0, nums.length - 1);
};
LeetCode刷题篇—53.最大子序和 LeetCode刷题篇—53.最大子序和题目思路求解方法 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 思路 本题的思路有暴力法和分治法两种,首先介绍暴力法求解。 1、暴力法 根据第一题的启发,我首先想到 (1)先设定初始sum值为0,再新开辟一个vector数组arr用于存放和值; (2)双层循环遍历数组,外层 i 从0到数组最后一个元素,将nums[i]即这个数本身给到sum,再将sum放入arr中; (3)内层循环 j 从 i+1 开始 阅读详情

相关推荐

stata:stata软件教程(人大十八讲)(1) 第一章 stata入门

第一章 stata入门1.1 安装1.2 启用和退出1.3 打开和查看数据1.4 寻求帮助与网络资源1.5 命令示例1.6 几个环境设置1.7 复习与练习1.8 附录 注:教材为:Stata 统计分析教程 stata软件教程(人大十八讲) 中国人民大学出版社 陈传波 1.1 安装 1.2 启用和退出 1.3 打开和查看数据 1.4 寻求帮助与网络资源 1.5 命令示例 1.6 几个环境设置 1.7 复习与练习 1.8 附录 ...

qq_47805483的博客 1万+

float最大_【每日Leetcode】No.53 最大子序和(经典题型建议好好思考一下~)

题目:最大子序和给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例一输入[-2,1,-3,4,-1,2,1,-5,4]输出6解释连续子数组[4,-1,2,1]的和最大,为 6。进阶:如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。题解思路一递归思想。首先,题目要求,一个连续子数组一定要以一个数作为结尾,因...

weixin_39816062的博客 85

小米万兆路由器里的Docker安装可道云(Kodexplorer)私有网盘

小米2022年12月份发布了万兆路由器,里面可以使用Docker。 今天尝试在小米的万兆路由器里安装[可道云](http://kodcloud.com/)(Kodexplorer)私有网盘。

engchina的专栏 1万+

LeetCode刷题之:分治算法

这里写自定义目录标题LeetCode刷题之:分治算法新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 LeetCode刷题之:分治算法 LeetCode刷题 DataWhale组队学习 分治算法的思想是:将一个大问题分解为若

RonnieZhao19的博客 303

优化QT QML中RTSP流播放延迟:海康摄像头实时监控实践

本文详细探讨了在QT QML中优化海康摄像头RTSP流播放延迟的实践方法。通过调整MediaPlayer缓冲策略、硬件加速、解码器优选等五大技巧,显著降低实时监控场景下的延迟问题。文章还提供了海康摄像头RTSP连接实战代码和避坑指南,帮助开发者快速实现高效流媒体播放。

weixin_28363123的博客 557

【OWL部署】Manus又一开源平替OWL真的很好用吗?手把手带你部署并运行你的AI助手OWL(对接Qwen、硅基流动接口)

本文介绍了通用人工智能OWL的部署及国内接口对接,全篇干货满满,手把手教学。

MosuoLc的博客 4046

代码随想录算法训练营第四十三天 | 找公共的子序列 | 392.判断子序列(编辑距离)| 115.不同的子序列(困难)

自己实现中遇到哪些困难1035.不相交的线: 最长公共子序列53. 最大子序和:子数组的最大和392.判断子序列字符串s, 是否出现在字符串t中,判断他们子序列怎么想到的去找两个字符串中的公共子序列。115.不同的子序列s 的子序列, 满足 t 的个数。今日收获,记录一下自己的学习时间。

Noah_aa的博客 830

修改Windows hosts文件的解决方案

本文主要介绍了修改Windows hosts文件解决方案,希望能对新手有所帮助。 文章目录 1. 问题描述 2. 解决方案 2.1 安装软件 2.2 修改hosts文件

weixin_43178406的博客 1万+

递归分治OJ做题报告

总结了递归和分治算法的学习要点。

sparkle_soul的博客 200

RK3568 Android14 移远GNSS卫星导航模组LC760Z GPS北斗定位模块调试

Rockchip RK3568 作为一款高性能、低功耗的国产SoC,被广泛应用于工业网关、车载中控和智能手持终端等领域。在这些应用场景中,位置服务(Location Service) 往往是不可或缺的功能。本文将详细记录如何集成GPS模组到 RK3568 开发板上,通过 UART(串口)接口集成通用的 GPS 模块(如 移远LC760Z 或 EC20 4G 模块自带的 GPS 功能也差不多),并实现数据的解析与上层应用对接。

qq_33427070的博客 1413

【Halcon-2D测量】set_metrology_object_param 函数功能(用于配置计量对象常规参数)

HALCON算子 set_metrology_object_param 是2D计量模块的核心配置工具,用于动态修改计量对象的测量区域、边缘检测和几何拟合参数。该算子需在检测前调用,支持批量或单独修改对象参数,包含三类关键参数:测量区域(如长度、间距)、边缘检测(如平滑Sigma、阈值)和几何拟合(如RANSAC阈值、最小分数)。使用时需注意参数互斥规则(如measure_distance优先于num_measures)和多线程同步要求。算子无输出参数,仅修改计量模型内部状态,需配合apply_metrolo

weixin_45590420的博客 292

[LeetCode-53] 最大子序和

发布于个人公众号,打开微信,搜索MelodyJerry即可 ## 53. 最大子序和 LeetCode官方的难度定位为简单,个人觉得可以达到中等的!!! 难度 简单 通过率 54.64%(571,167/1,045,196) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 .

喜欢前端的后端 MelodyJerry 7869

YOLO11涨点优化:Loss魔改 | WIoU (Wise-IoU) v3版本全面替换,基于动态非单调聚焦机制,让模型更聪明地学习

YOLOv11目标检测中的WIoU v3损失函数改进 本文探讨了YOLOv11目标检测模型中CIoU损失函数的局限性,并提出了WIoU v3改进方案。关键发现包括: CIoU的缺陷:在低质量样本(小目标/遮挡目标)上过度惩罚,导致模型优化方向偏离,小目标AP往往比大目标低30%左右。 WIoU v3的创新: 动态非单调聚焦机制:根据样本"离群度"智能分配梯度 让模型重点优化中等质量样本,减少对低质量样本的无效关注 采用指数移动平均来自适应调整质量评判标准 实际效果:WIoU v3在保持大

2601_95807009的博客 423

Leetcode 053 最大子序和 python 分治+动态规划

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。   思路: 首先我们分析题目,我们思考,为什么最大和的连...

weixin_41958153的博客 5520

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

[leetcode] 53. 最大子序和

题目: 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 链接:[leetcode] 53. 最大子序和 示例 1: 输入:nums = [-2,1,-3,4,-1,2,1,-5,4] 输出:6 解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。 示例 2: 输入:nums = [1] 输出:1 示例 3: 输入:nums = [0] 输出:0 示例 4: 输入:nums = [-1] 输出:-1 示例 5: 输入:nums

qq_14993591的博客 192

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LeetCode 53. 最大子序和(C语言)

53. 最大子序和 Description 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 Analyze 给定的函数如下: @param nums 一个数组 @param numsSize 数组长度 @return 最大和 这题可以先求前缀和转变一下思路,当求出前缀和后问题就变成了在前缀和数组中

狂吃不胖温同学的博客 369

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

【LeetCode-53】53.最大子序和——优化

53.最大子序和 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 方法一:暴力枚举,时间复杂度O(n3) 1、找出子数组的...

weixin_42956047的博客 300

leetcode 53. 最大子序和

leetcode 3. 无重复字符的最长子串 题目详情 题目链接 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。 示例 2: 输入: “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。 示例 3: 输入: “pwwk...

qq_33789406的博客 107

【算法-LeetCode】53. 最大子序和(动态规划初体验)

LeetCode53. 最大子序和 发布:2021年7月24日23:23: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 = [0] 输出:0 示例 4: 输入:nums = [-1] 输出:-1

赖念安的博客 674

数组超过预设的最大数组大小_[leetcode数组系列]4 最大子序和

1二面记录小蓝还是有点实力的,过五关斩六将来到了二面,并联系上了二面面试官。一段简单的介绍后让小蓝手撕并拍照发过去(纯靠想象)。1Leetcode53最大子序和给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 ...

weixin_39618956的博客 1481

53.最大子序和

一、前言 分类:动态规划。 问题来源LeetCode 53 难度:简单。 问题链接:https://leetcode-cn.com/problems/maximum-subarray/ 二、题目 给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 三、思路 用动态规划思路解决这个问题。 ...

行走 147

代码随想录算法训练营第53天| Leetcode 1143.最长公共子序列、Leetcode 1035.不相交的线、Leetcode 53. 最大子序和

做了这么多动态规划的题目,感觉最重要的就是学会举一反三。最后,如果文章有错误,请在评论区或私信指出,让我们共同进步!

Camellia__Wang的博客 1030

leetcode 53. 最大子序和 简单 分治

题目: 分析:建议了使用分治法,那么从分治法思考,如何分成子问题去求解。数组问题切分的话一般从中间切开,分成规模尽量相等的子问题,左右子数组。最大子序和的问题切分的话会有3种情况,一个数组的最大子序和在切分后的左子数组,或者在右子数组,或者横跨左右子数组,那么使用递归求解,逐步求出子数组3种情况的最大子序和,最终求解整个问题 上代码 class Solution { public int...

weixin_40208575的博客 240

C++力扣题目455--分发饼干 376--摆动序列 53--最大子序和

这道题是贪心很好的一道入门题目,思路还是比较容易想到的。文中详细介绍了思考的过程,想清楚局部最优,想清楚全局最优,感觉局部最优是可以推出全局最优,并想不出反例,那么就试一试贪心本题的贪心思路其实并不好想,这也进一步验证了,别看贪心理论很直白,有时候看似是常识,但贪心的题目一点都不简单!后续将介绍的贪心题目都挺难的,所以贪心很有意思,别小看贪心!

weixin_47675625的博客 951

leetcode学习记录5——53.最大子序和

leecode学习记录leecode学习记录五最大自序和解题思路代码 leecode学习记录五 最大自序和 难度:简单 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 来源:力扣(LeetCode) 链接...

yqzsszl的博客 191

LeetCode每日一题--最大子序和

LeetCode刷题笔记之最大子序和

Mingw_的博客 386
上一篇: 珺珺学算法(1)算法概述及复杂度分析
下一篇: 关于对leetcode20有效的括号的思考
CodeMagiclin
博客等级 码龄7年 8粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值