(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #53最大子序和”

ELI5数据集:面向长文本解释生成的高质量问答基准 解释生成是自然语言处理中连接语言理解与认知建模的关键任务,其核心在于将复杂概念转化为逻辑清晰、层次分明、符合人类认知习惯的自然语言阐述。不同于传统阅读理解任务聚焦答案定位,解释生成要求模型具备因果推理、类比迁移与分层抽象能力,技术价值体现在提升AI系统的可解释性、可信度与教育适用性。典型应用场景包括智能客服中的故障归因、在线教育中的知识讲解生成、科学传播中的多粒度通俗化表达,以及企业知识库的主动式认知服务。ELI5作为当前最具真实性的长形式解释数据集,以Reddit社区真实提问与结构化回答为基础,天然支持对 阅读详情

第二题 #53 在这里插入图片描述
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-subarray
1、暴力解法 :时间复杂度O(n^2)空间复杂度O(1)
第一遍遍历数组,以每个数组的一个元素为其起始值
第二遍遍历数组,求以某个元素为起始值的最大连续数组和的值
注意:返回的最大值的初始值要设置为INT_MIN

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int max_ans = INT_MIN;
        int nums_size = nums.size();
        for( int i=0; i<nums_size; i++){
            int sum = 0;
            for( int j=i; j<nums_size; j++){
                sum += nums[j];
                if(sum>max_ans)
                    max_ans = sum;
            }
        }
        return max_ans;
    }
};

2、动态规划法 时间复杂度O(n)、空间复杂度O(n) (优化后使用注释的代码空间复杂度为O(1)
用 f(i)代表以第 i个数结尾的所有连续子数组的最大和,0≤i≤n−1max {f(i)},我们只需要求出每个位置的 f(i),然后返回 f 数组中的最大值即可。我们可以考虑nums[i]单独成为一段还是加入f(i-1)对应的那一段,这取决于nums[i]和 f(i-1)+nums[i] 的大小,所以有f(i) = max { f(i - 1) +nums[i],nums[i]} 。
我们可以只用一个变量 pre 来维护对于当前 f(i)的f(i−1) 的值是多少,从而让空间复杂度降低到 O(1)。

class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int max_ans = INT_MIN;
        int nums_size = nums.size();
        vector<int> f(nums_size);
        f[0] = nums[0];
        max_ans = f[0];
    
        for( int i=1; i<nums_size; i++){
            f[i] = max(f[i-1]+nums[i], nums[i]);
            max_ans = max(f[i], max_ans);
        }

        /*
        int pre = 0 ;
        for(const auto &x : nums){
            pre = max( pre + x, x);
            max_ans = max( pre, max_ans);
        }
        */
        return max_ans;
    }
};

3、分治法 递归求最大值:时间复杂度O(nlog(n))、空间复杂度O(log(n))
将数组从中间分开,最大子序一共存在三种情况:
①在数组的左半部分
②在数组的右半部分
③跨域中间节点部分。
然后对分开的数组左右两部分进行递归相同操作。

	class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int nums_size = nums.size();
        int ans = INT_MIN;

        ans = maxSubArrayHelper(nums, 0 , nums_size-1);
        return ans;
        
    }

    int maxSubArrayHelper(vector<int>& nums, int left, int right){
        
        if(left==right) return nums[left];
        int mid = (left+right)/2;
        int LeftSum = maxSubArrayHelper(nums, left, mid);
        int RightSum  = maxSubArrayHelper(nums, mid+1, right);
        int MidSum = maxSubArrayMid(nums, left, mid, right);

        int result = max(LeftSum,RightSum);
        return max(result,MidSum);
    }

    int maxSubArrayMid(vector<int>& nums, int left, int mid, int right){

        int leftSum  = INT_MIN;
        int sums=0;
        for(int i = mid; i >=left; i--){
            sums += nums[i];
            leftSum  = max(leftSum ,sums);
        }

        int rightSum  = INT_MIN;
        sums=0;
        for(int i = mid+1; i <=right; i++){
            sums += nums[i];
            rightSum = max(rightSum,sums);
        }
        return rightSum+leftSum;
    }
};

4、贪心算法:时间复杂度O(n)空间复杂度O(1)
从数组的左边开始向友遍历迭代,如果累加的和小于0则重新开始累加;

	class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int nums_size = nums.size();
        int ans = INT_MIN;
        int sum = 0;

        for(int i = 0; i < nums_size; i++){

            sum += nums[i];
            ans = max(sum , ans);
            if(sum<0)
            sum = 0;
        }
        return ans;
        
    }
};
(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #276. 栅栏涂色 第九道、 #276. 栅栏涂色 有 k 种颜色的涂料和一个包含 n 个栅栏柱的栅栏,每个栅栏柱可以用其中一种颜色进行上色。 你需要给所有栅栏柱上色,并且保证其中相邻的栅栏柱 最多连续两个 颜色相同。然后,返回所有有效涂色的方案数。 注意: n 和 k 均为非负的整数。 示例: 输入: n = 3,k = 2 输出: 6 解析: 用 c1 表示颜色 1,c2 表示颜色 2,所有可能的涂色方案有: 柱 1 柱 2 柱 3 1 c1 c1 . 阅读详情

相关推荐

(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #256. 粉刷房子

第八道、#256. 粉刷房子 假如有一排房子,共 n 个,每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种,你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然,因为市场上不同颜色油漆的价格不同,所以房子粉刷成不同颜色的花费成本也是不同的。每个房子粉刷成不同颜色的花费是以一个 n x 3 的矩阵来表示的。 例如,costs[0][0] 表示第 0 号房子粉刷成红色的成本花费;costs[1][2] 表示第 1 号房子粉刷成绿色的花费,以此类推。请你计算出粉刷完所有房子最少的花费成本。 注.

electrical_engineer0的博客 392

LeetCode】C++ :简单题 - 53 最大子序和

53. 最大子序和 难度简单2757 给定一个整数数组nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释:连续子数组[4,-1,2,1] 的和最大,为6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 动态规划解法 class Solution { public: int maxSubArray(vector&...

weixin_44566432的博客 422

【信息科学与工程学】【数据科学】数据科学领域 第六篇 算法设计 07 堆、栈、表、矩阵、集合、队列、数组、字符串、树、图、动态规划、结构体、元组的算法01

当前段必须包含所有字符的最后出现位置。1. 字符串分割成最多片段2. 基因序列功能域划分3. 文本段落划分4. 音频声道分离5. 图像色彩分区6. 社交网络社群划分7. 蛋白质结构域8. 音乐乐章分段9. 代码模块划分10. 章节划分特征:一次扫描,贪心确定边界。

weixin_49199313的博客 1270

LeetCode-两数之和(C++)

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetC...

酸菜鱼翻身历程 183

分享一下使用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程

分享一下调试用Xilinx FPGA驱动MIPI DSI LCD屏的心路历程,看到的朋友们,可以避免继续踩坑。

haoxingheng的专栏 5014

Mediapipe入门——搭建姿态检测模型并实时输出人体关节点3d坐标(2024.1.4更新)

Mediapipe入门,利用mediapipe搭建人体整体检测模型,并输出右手21个关节点的坐标;mp_holistic.Holistic函数理解,mp_holistic.Holistic.process函数理解;mp.solutions.drawing_utils.draw_landmarks函数理解;Mediapipe实时姿态估计,3d骨架铰接图,matplotlib和Mediapipe绘图

kalakalabala的博客 6万+

Leetcode: Two Sum

class Solution { public: vector twoSum(vector &numbers, int target) { // Start typing your C/C++ solution below // DO NOT write int main() function vector result; i

chenhaoliu的专栏 411

短信验证码接收平台完整搭建教程(超详细版,附完整源码)

在网站注册、用户登录、找回密码等功能中,验证码(特别是短信验证码)已成为验证用户身份的常见方式。本教程将详细介绍如何从零搭建一个短信验证码接收平台,用于保存、展示并管理来自短信网关或中间转发程序提交的验证码数据。✅ 教程适合有基本 Python/HTML 基础的开发者🚫 禁止用于任何违法用途,仅供学习参考✅ 支持通过 POST 接口接收短信验证码✅ 支持通过网页实时查看验证码历史记录✅ 验证码信息保存在 SQLite 数据库✅ 支持时间戳排序、查询最新验证码。

weixin_52548902的博客 4551

leetcode 5658. 任意子数组和的绝对值的最大值(C++)

给你一个整数数组nums。一个子数组[numsl, numsl+1, ..., numsr-1, numsr]的和的绝对值为abs(numsl+ numsl+1+ ... + numsr-1+ numsr)。 请你找出nums中和的绝对值最大的任意子数组(可能为空),并返回该最大值。 abs(x)定义如下: 如果x是负整数,那么abs(x) = -x。 如果x是非负整数,那么abs(x) = x。 示例 1: 输入:nums = [1,-...

qq_27060423的博客 473

EVM算法的Python实现

EVM(Eulerian Video Magnification,欧拉视频放大或欧拉影像放大)是一种将视频中的微小变化进行放大的算法,正如论文标题所说《Eulerian Video Magnification for Revealing Subtle Changes in the World》,该算法可以将视频中的微小变化转变为肉眼可以

flyingzhao 1万+

泛微OA集成阿里云短信(E9保姆教程)

泛微OA集成阿里云短信(E9保姆教程)

技术分享 515

(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #剑指 Offer 42. 连续子数组的最大和

第十道、#剑指 Offer 42. 连续子数组的最大和 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。 要求时间复杂度为O(n)。 示例1: 输入: nums = [-2,1,-3,4,-1,2,1,-5,4] 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 提示: 1 <= arr.length <= 10^5 -100 <= arr[i] <= 100 注意:本题与主站 53 题相同:htt.

electrical_engineer0的博客 202

增量学习入门:概念、代码示例与应用场景

在当今快速变化的数据环境中,传统的机器学习模型往往需要重新训练以适应新的数据。然而,这种方法不仅耗时耗力,还可能导致模型性能的不稳定。增量学习(Incremental Learning)作为一种新兴的学习范式,能够在新数据到来时动态更新模型,而无需重新训练整个模型。本文将详细介绍增量学习的基本概念、代码示例、应用场景以及需要注意的事项。增量学习作为一种高效的机器学习方法,能够在新数据到来时动态更新模型,具有广泛的应用前景。通过本文的介绍,相信你对增量学习有了初步的了解。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1152

每周技术面试高频题汇总:大厂面试官到底在考什么?完整实战指南

大家好,又到了每周的面试复盘时间。。现在的面试官更喜欢把你扔进一个具体的“场景”里,看你怎么思考、怎么权衡(Trade-off)。基于过去一周 优快云、掘金、LeetCode 等社区的热议内容,我为大家精选了,涵盖算法、系统设计、数据库和网络四大领域。咱们不整那些虚的,直接上干货,看看这些题目背后的考察点和解题思路。

热爱技术与前沿创新,深耕科技领域,在科创中精进自我;探索技术乐趣,分享技术干货与成长心得,以技术为伴,热爱生活,在科创与生活中双向成长。 482

10、数据挖掘与轨迹生成技术:FSSEMiner与CondTraj - GAN的探索

本文介绍了两种先进的数据处理技术:FSSEMiner算法用于从动态属性图中挖掘频繁顺序子图演化模式,揭示如交通流和疾病传播等复杂系统的演化规律;CondTraj-GAN是一种端到端的条件生成对抗网络,能够生成高质量的合成车辆轨迹,解决真实轨迹数据因隐私问题难以获取的挑战。通过实验评估与真实数据集验证,两种技术在可扩展性、实用性及生成质量方面均表现出色,并在交通管理、城市规划、自动驾驶研发等领域具有广泛应用前景。

grafana8visual的博客 87

使用 Simulink + Simscape Electrical 对 级联H桥多电平整流器并网功率分配 进行建模与仿真

摘要:本文详细介绍了基于Simulink对级联H桥(CHB)多电平整流器并网功率分配进行建模的方法。内容包括系统组成、功率分配意义、Simulink建模流程、PWM控制策略实现、功率分配算法设计以及仿真分析。重点阐述了主电路搭建、双环控制结构(外环功率分配+内环电流控制)和载波层叠PWM调制技术,并提供了功率分配算法示例。通过优化参数和控制算法,可提升系统性能。该建模方法为电力电子变换器和新能源并网系统研究提供了有效工具。

amy_mhd的博客 251

奇安信校招笔试题解析:网络安全基础与Web安全实战

网络安全工程师的校招笔试,往往不是孤立考察知识点,而是将网络协议、Web攻防、Linux操作、密码学与编程能力融为一体,检验候选人是否具备安全从业者的系统思维。从TCP半连接机制到SQL注入与XSS的攻防原理,再到混合加密方案和日志分析,这些基础能力决定了能否在实际工作中快速定位风险。对于准备安全研发、渗透测试、安全分析等岗位的应届生而言,通过典型笔试题进行自检,能有效暴露知识盲区。2019年奇安信校招笔试题(二)正是这样一套覆盖面广、贴近实战的参考样本,帮助备考者理解企业选拔逻辑,夯实安全基础。

weixin_34414196的博客 464

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

51c大模型~合集111

OpenAI 的某发言人表示:「为了提高清晰度和安全性,我们增加了一个额外的后处理步骤,其中模型会审查原始的思维链,删除任何不安全的内容,然后简化某些复杂的思维。可以看到,虽然 ChatGPT 确实完成了任务并展示了总结版的思维链,但似乎并未如 OpenAI 发言人说的那样给出与提示词语言同样语言的总结版。北大-灵初联合实验室表示,Align-DS-V的多模态强推理能力是VLA模型大脑端的核心,接下来的研究训练计划,是利用多模态推理模型的跨模态穿透能力,实现action穿透,最终实现真正高效的VLA模型。

whaosoft~aiotの开发板商城 2317

假人有限元模型

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

GPT-4.1是真是假?工程师必备的LLM模型真实性验证与编程能力评测指南

大语言模型(LLM)的命名混乱与传播失真已成为行业常态,‘GPT-4.1’‘4.1 mini’等非官方称谓频繁出现,实则多为GPT-4 Turbo的调用配置别名或开源模型误标。其背后涉及模型真实性判断、API行为指纹识别、上下文理解能力、代码生成正确率(CGR)等核心技术原理。这类现象凸显了工程实践中对可复现评测体系的迫切需求——需依托官方信源穿透、温度敏感性测试、工具调用结构解析等硬性指标,构建不依赖厂商话术的自主验证闭环。本文聚焦LLM在真实编程场景中的落地效能,覆盖从模型证伪、5维能力量化(CGR/D

B1334628598的博客 505

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【用 Vibe Coding 实现的 C++17 在线判题系统】项目准备 + 后端开发

本文介绍了基于Vibe Coding方法搭建仿LeetCode的OJ平台项目准备过程。首先在Gitee创建项目仓库,通过AI引导的深度访谈梳理需求并生成SPEC.md文档。随后根据文档安装必要依赖项,包括构建工具、C++库、MySQL数据库等。项目采用C++后端(cpp-httplib)和原生前端技术栈,最终按照SPEC文档构建了完整的项目目录结构。整个过程展示了如何使用AI辅助进行项目规划和初始化工作。

无限进步!!! 421

(C++)Leetcode狂刷200题——标签“链表篇--简单难度10道 #141. 环形链表

第七道、#141. 环形链表 给定一个链表,判断链表中是否有环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。 示例 1: 输入:head = [3,2,0,-4], pos = 1 输出:true 解释:链表中有一个环,其尾部连接到第二个节点。 示例 2: 输入:head = [1,2], pos = 0 输出:true 解释:链表中有一个环,其尾部连接到第一个节点。 示例 3: 输入:head =.

electrical_engineer0的博客 436

(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #1025. 除数博弈

第六道、#1025. 除数博弈 爱丽丝和鲍勃一起玩游戏,他们轮流行动。爱丽丝先手开局。 最初,黑板上有一个数字 N 。在每个玩家的回合,玩家需要执行以下操作: 选出任一 x,满足 0 < x < N 且 N % x == 0 。 用 N - x 替换黑板上的数字 N 。 如果玩家无法执行这些操作,就会输掉游戏。 只有在爱丽丝在游戏中取得胜利时才返回 True,否则返回 false。假设两个玩家都以最佳状态参与游戏。 示例 1: 输入:2 输出:true 解释:爱丽丝选择 1,鲍勃无法进行操作。.

electrical_engineer0的博客 355

(C++)Leetcode狂刷200题——标签“哈希表篇--简单难度10道 #447. 回旋镖的数量

第七道、 #447. 回旋镖的数量 给定平面上 n 对不同的点,“回旋镖” 是由点表示的元组 (i, j, k) ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。 找到所有回旋镖的数量。你可以假设 n 最大为 500,所有点的坐标在闭区间 [-10000, 10000] 中。 示例: 输入: [[0,0],[1,0],[2,0]] 输出: 2 解释: 两个回旋镖为 [[1,0],[0,0],[2,0]] 和 [[1,0],[2,0],[0,0]] 来源:力扣(LeetC.

electrical_engineer0的博客 342

(C++)Leetcode狂刷200题——标签“动态规划篇--简单难度10道(两道重复) #392. 判断子序列

第七道、#392. 判断子序列 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长(长度 ~= 500,000),而 s 是个短字符串(长度 <=100)。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。 示例 1: s = “abc”, t = “ahbgdc” 返回 true. 示例 2: s = “.

electrical_engineer0的博客 283

(C++)Leetcode狂刷200题——标签“链表篇--简单难度10道 #160. 相交链表

第八道、#160. 相交链表 编写一个程序,找到两个单链表相交的起始节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。从各自的表头开始算起,链表 A 为 [4,1,8,.

electrical_engineer0的博客 278

(C++)Leetcode狂刷200题——标签“字符串篇--简单难度10道 #657. 机器人能否返回原点

第十道题、# #657. 机器人能否返回原点 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右),L(左),U(上)和 D(下)。如果机器人在完成所有动作后返回原点,则返回 true。否则,返回 false。 注意:机器人“面朝”的方向无关紧要。 “R” 将始终使机器人向右移动一次,“L” 将始终向左移动等。此外,假设每次移动机器人的.

electrical_engineer0的博客 259
上一篇: (C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #1两数之和”
下一篇: (C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #26删除排序数组中的重复项”
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值