LeetCode Hot 100:普通数组

LeetCode Hot100 刷题笔记(2)—— 子串、普通数组、矩阵 一、子串 二、普通数组 三、矩阵 阅读详情

LeetCode Hot 100:普通数组

53. 最大子数组和

思路 1:动态规划

class Solution
{
public:
    int maxSubArray(vector<int> &nums)
    {
        // 特判
        if (nums.empty())
            return 0;
        if (nums.size() == 1)
            return nums[0];
            
        int n = nums.size();
        // 状态数组
        vector<int> dp(n + 1, 0);
        // dp[i]: 以第i个元素结尾,连续子数组的最大和
        int maxSum = INT_MIN;
        // 状态转移
        for (int i = 1; i <= n; i++)
        {
            if (dp[i - 1] > 0)
                dp[i] = dp[i - 1] + nums[i - 1];
            else
                dp[i] = nums[i - 1];
            maxSum = max(maxSum, dp[i]);
        }
        
        return maxSum;
    }
};

空间优化:

class Solution
{
public:
    int maxSubArray(vector<int> &nums)
    {
        // 特判
        if (nums.empty())
            return 0;
        if (nums.size() == 1)
            return nums[0];
        int n = nums.size();
        int pre = 0, cur = 0, maxSum = INT_MIN;
        for (int i = 0; i < n; i++)
        {
            if (pre > 0)
                cur = pre + nums[i];
            else
                cur = nums[i];
            pre = cur;
            maxSum = max(maxSum, cur);
        }
        return maxSum;
    }
};

56. 合并区间

思路 1:排序

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        if (intervals.empty())
            return {};

        sort(intervals.begin(), intervals.end(),
             [](const vector<int>& i1, const vector<int>& i2) {
                 return i1[0] < i2[0];
             });

        vector<vector<int>> ans;
        for (vector<int>& interval : intervals) {
            int left = interval[0], right = interval[1];
            if (ans.empty() || ans.back()[1] < left)
                ans.push_back({left, right});
            else
                ans.back()[1] = max(ans.back()[1], right);
        }

        return ans;
    }
};

189. 轮转数组

思路 1:辅助数组

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        int n = nums.size();
        k %= n;
        vector<int> ans(nums.begin() + n - k, nums.end());
        for (int i = 0; i < n - k; i++)
            ans.push_back(nums[i]);
        nums = ans;
    }
};

思路 2:数组翻转

class Solution {
public:
    void rotate(vector<int>& nums, int k) {
        k %= nums.size();
        reverse(nums.begin(), nums.end());
        reverse(nums.begin(), nums.begin() + k);
        reverse(nums.begin() + k, nums.end());
    }
};

238. 除自身以外数组的乘积

思路 1:前后缀分解

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> pre(n);
        pre[0] = nums[0];
        for (int i = 1; i < n; i++)
            pre[i] = pre[i - 1] * nums[i];
        vector<int> suf(n);
        suf[n - 1] = nums[n - 1];
        for (int i = n - 2; i >= 0; i--)
            suf[i] = suf[i + 1] * nums[i];

        vector<int> ans(n);
        for (int i = 0; i < n; i++) {
            int left = i == 0 ? 1 : pre[i - 1];
            int right = i == n - 1 ? 1 : suf[i + 1];
            ans[i] = left * right;
        }

        return ans;
    }
};

空间优化:

class Solution {
public:
    vector<int> productExceptSelf(vector<int>& nums) {
        int n = nums.size();
        vector<int> ans(n);
        ans[0] = 1;
        for (int i = 1; i < n; i++)
            ans[i] = ans[i - 1] * nums[i - 1];

        int mult = 1;
        for (int i = n - 1; i >= 0; i--) {
            ans[i] = ans[i] * mult;
            mult *= nums[i];
        }

        return ans;
    }
};

41. 缺失的第一个正数

思路 1:原地哈希

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int n = nums.size();
        for (int i = 0; i < n; i++)
            while (nums[i] > 0 && nums[i] <= n && nums[nums[i] - 1] != nums[i])
                swap(nums[nums[i] - 1], nums[i]);
        for (int i = 0; i < n; i++)
            if (nums[i] != i + 1)
                return i + 1;
        return n + 1;
    }
};
【EB_Tresos专题】-01-EB Tresos导入工程 <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> <--返回「Autosar_BSW高阶配置」总目录--> <--返回「Autosar_BSW高阶配置」专栏主页--> <--返回「个人博客」首页--> 结尾 ... 阅读详情

相关推荐

光电式烟雾传感器实战指南(一) 光迷宫设计与散射原理篇

本文深入解析了光电式烟雾传感器的核心部件——光迷宫的设计原理与光散射机制。文章详细阐述了如何通过精心设计的光学结构实现‘透气不透光’,并重点探讨了前向散射(尤其是135°角)在提升烟雾监测系统灵敏度与可靠性中的关键作用,为DIY爱好者提供了从理论到实践的完整指南。

weixin_29229055的博客 586

前端力扣刷题 | 5:hot100之 普通数组

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

2502_90366796的博客 1148

2D激光slam数据集的下载与测试

参考博客: https://blog.youkuaiyun.com/qq_24894159/article/details/81265991 https://blog.youkuaiyun.com/fk1174/article/details/52673413#commentBox 数据集下载与生成 下载数据集 下载网址: http://ais.informatik.uni-freiburg.de/slamevaluation/datasets.php 进去网站后点你想下载的对应的"download log file" 然后你

老李的博客 4025

力扣HOT100之普通数组:189. 轮转数组

看了下灵神的题解,感觉他的思路比较有泛化性,三次反转的思路可以应用在轮转的问题上,主要是看下三次反转为什么可以实现轮转的效果,这里直接看灵神的证明就好了,我觉得还蛮通俗易懂的。这道题我也没想到特别好的解法,直接用最笨的解法AC了,首先k可能会远超数组。灵神也提到了剪枝的问题,为了避免无效的轮转,我们需要先对k取模再进行反转。的大小,这就意味着可能会出现多次无效轮转,因此我们先对次数k进行剪枝,循环从后往前遍历,将当前位置的前面k个位置上的元素移动过来即可,当下标。就会被轮转到数组的前端,则。

weixin_52151595的博客 289

monocle3-单细胞轨迹分析在疾病研究中的应用

本文深入探讨了monocle3在单细胞轨迹分析中的核心应用,特别是在疾病研究领域。通过实战案例,详细讲解了如何利用monocle3进行轨迹推断,构建细胞状态演变的“路线图”,并结合伪时间分析定位疾病进展阶段。文章还介绍了如何挖掘驱动疾病发展的关键基因,并分享了数据整合、根节点选择等进阶技巧与避坑指南,旨在帮助研究者利用这一强大工具揭示肿瘤异质性、免疫治疗耐药等复杂生物学过程的动态机制。

a3b4c5的博客 639

DMTF相关协议(一):Redfish和SMBIOS

Redfish 是一种管理标准,使用超媒体 RESTful 接口中的数据模型表示。该模型以标准的、机器可读的模式表示,消息的有效负载以 JSON 表示。该协议本身利用了 OData v4。由于它是一个超媒体 API,因此能够通过一致的接口表示各种实现。它具有管理数据中心资源、处理事件、长时间任务和发现的机制。

weixin_44032634的博客 2265

力扣HOT100之普通数组:56. 合并区间

用贪心算法需要先将整个二维数组进行排序,排序规则就是向量的左侧端点小的排在前面,然后我们定义好排序规则后利用。这里还有一个要注意的点,当遍历结束后,还有最后一个区间没有加入到结果中,所以在循环结束后我们需要手动将。看了下灵神的题解,思路也是贪心,但是他的代码简洁很多,这里也把他的代码贴出来学习一下。函数对输入数组进行排序,然后遍历整个向量,在初始时,定义第一个向量的左右端点分别为。的区间,就将该区间加入到前一个区间,此时我们需要维护。的值,如果当前遍历到的向量的右端点值。,然后每遍历到一个左端点小于。

weixin_52151595的博客 299

AF3 ProteinDataset类的_patch方法解读

AlphaFold3 protein_dataset模块 ProteinDataset 类  _patch 方法的主要目的是围绕锚点残基(anchor residues)裁剪蛋白质数据,提取一个局部补丁(patch)作为模型输入。

qq_27390023的博客 1147

力扣HOT100之普通数组:53. 最大子数组和

但是我看灵神解这道题是用前缀和和动态规划来解的,这里主要学习一下前缀和的解法,动态规划的解法在代码随想录里已经学习过了。这道题目我用贪心做的,感觉用贪心的思路比较简单,以后要是面试碰到这道题就直接用贪心好了,这道题用贪心的核心思想就是不断将数组元素。来记录当前的最小前缀,每遍历一个前缀和,我们就可以将其减去其左侧的最小前缀和,这样就能得到以第。开始遍历,直到遍历结束,在从左往右遍历的过程中,用一个变量。,我们知道子数组的和可以转化为两个前缀和的差,例如,这是贪心的代码,还是挺简洁的。

weixin_52151595的博客 393

【教程4>第5章>第19节】基于Gardner环的位同步系统MATLAB仿真与带时偏基带数据导出

由于在FPGA中,时偏的影响主要是由系统收发两端晶振的不同步带来的,所以在仿真测试阶段,很难直接通过FPGA来模拟这个因素,所以我们采用MATLAB模拟带时偏的基带输入信号,并将其导出,由FPGA调用作为测试信号源。可以看到,同步之后(图3)相对于带时偏的基带信号(图2),其更接近标准的数据(图1),且抖动较小。订阅过的朋友可以复习下这个课程,没有订阅的朋友,也可以直接复制如下的程序进行仿真测试。上述程序中,加入时偏的基带信号,通过子函数。同步之后,可以恢复出标准的QPSK星座图。

FPGA/MATLAB学习教程/源码/项目合作开发 520

英飞凌Tricore实战系列导读

笔者结合项目应用经验对Tricore MCU的开发及应用经验进一步总结,成人达己,渡己渡人。

initiallizer的博客 3790

力扣HOT100之普通数组:238. 除自身以外数组的乘积

看了下灵神的题解,他的思路和我一样,也是用前后缀来做的,这里就不再赘述了。这道题不能使用除法,我第一时间想到用前缀表和后缀表来解决,假设数组。,一共需要三次线性遍历,时间复杂度为O(n)。,其中特别要注意的是,前缀表。,我们直接定义前缀表。

weixin_52151595的博客 277

《MATLAB项目实战》,专栏目录和介绍

MATLAB 是一款强大且广泛应用的数值计算和数据可视化软件工具,它提供了一个高效、简洁的编程环境,使用户能够进行从简单的矩阵运算到复杂的多维数据分析的各种计算任务。无论是在人工智能、计算机视觉、图像处理还是其他领域,MATLAB 都能够提供精准、快速的解决方案,因此成为了全球科研人员、工程师以及数据分析师的得力工具。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 6478

力扣HOT100之普通数组:41. 缺失的第一个正数

这道题自己想了一会没想出来,然后就去看题解了,感觉要满足O(n)的时间复杂度,还要满足O(1)的空间复杂度还蛮难的,这里主要把题解的思路讲一下,很巧妙。,因此我们只需要从左往右再遍历一次数组,检查数组的元素是否与其下标对应,如果发现某个位置上的元素。循环,在数组内存在对应的正确元素时(不存在的话就无能为力了),我们一定能保证下标为。的情况,我们不作任何处理,因为再怎么处理也没用,此外,若下标为。匹配上,我们是不知道的,然而我们在前面提到,每进行一次。处放置的元素是正确的,但是交换过来的值是否能与下标。

weixin_52151595的博客 545

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

LeetCode 热题 HOT100(三):子串进阶与普通数组(Go 实现)

(欢迎来访)✨本文覆盖力扣「热题 100」学习计划第题,全部使用实现。第 10 题「和为 K 的子数组」见上一篇;本篇从滑动窗口最大值开始。

lihaoweiwudi_的博客 551

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

day11 leetcode-hot100-13(普通数组1)ps:子串

(1)设置一个数组f,数组f的每个位置,代表以该数为最后1位的最大子串和。(2)最后取f(i)的最大值即可。这个题目是比较典型的动态规划。也是代表子串的一个形式。

m0_62948824的博客 243

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

leetcode-hot100-普通数组:53最大子数组和-56合并区间-189轮转数组-238除了自身以外数组的乘积-41缺失的第一个正数

普通数组:53最大子数组和-56合并区间-189轮转数组-238除了自身以外数组的乘积-41缺失的第一个正数

XSYaaaaan的博客 422

leetcode hot100:五、解题思路大全:普通数组(最大子数组和、合并区间、轮转数组、除自身以外数组的乘积、缺失的第一个正数)、图论(岛屿数量、腐烂的橘子、课程表、实现Trie前缀树)

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

shanshan的博客 359

LeetCode Hot 100 | 普通数组(C++ 题解)

题号题目核心思路时间复杂度53最大子数组和Kadane 贪心O(n)56合并区间排序 + 贪心O(n log n)57插入区间分三段线性扫描O(n)189轮转数组三次翻转O(n)238除自身以外数组的乘积前缀积 × 后缀积O(n)

jcm0903的博客 431

LeetCode-Hot100-普通数组

本文展示了5个数组处理算法:1)最大子数组和采用动态规划;2)合并区间先排序后遍历;3)轮转数组使用取模运算;4)数组乘积通过左右累积计算;5)缺失正数利用原地哈希。这些算法都实现了O(n)时间复杂度,涵盖了动态规划、排序、索引计算等典型技巧。

2302_77139233的博客 231

【力扣hot100】python刷题笔记之普通数组

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

qq_50927224的博客 891

力扣HOT100合集

对于当前考虑的元素 nums[i],如果 dp[ j - nums[ i ] ] 为 true,说明可以用前面的元素构成和为 j -nums[ i ] 的子集,那么在加上当前元素 nums[ i ] 的情况下,就可以构成和为 j 的子集,因此 dp[ j ] 更新为 true。这样left往回走会导致错误的结果。最终得到的结果为[[1, 2, 3], [2, 1, 3], [3, 1, 2], [1, 3, 2], [2, 3, 1], [3, 2, 1]],即给定数组[1, 2, 3]的全排列结果。

qq_61504864的博客 5879

力扣(leetcode)hot 100普通数组看这一篇就够了

这期带来的是关于力扣 hot 100当中关于普通数组这一节的内容。保证看了的人都能够学会

yyyCode的博客 2363

力扣hot100_普通数组_python版本

【代码】力扣hot100_普通数组_python版本。

Y1n的博客 3879

力扣刷题Hot100之普通数组

比如7个数k=3 由[0,1,2,3,4,5,6]->[6,5,4,3,2,1,0]->[4,5,6,0,1,2,3]比较(x+nums[i],nums[i])记录当前最大和,并且比较(x,max)记录数组最大和,遍历得到结果。如果先(0,2)(3,6)数组就是[2,1,0,6,5,4,3]->[3,4,5,6,0,1,2]其实反推很好想出来,假如每次循环一次就返回到原点那循环到k-1就结束,最小公约数为k。利用动态规划解决,遍历数组,用变量x记录前一位的最大和,max为数组最大和。

weixin_74567525的博客 1753

Leetcode HOT 100 题目总结(已完结)

文章目录前引题目博客链接Easy No.1 - No.21 前引 这段时间感觉动态规划已经做伤了 就是真的没什么动力再做下去了 后面没做的也都是难的不行的dp题目了 想着还是要做的 这段时间换点口味 把力扣HOT 100题给全做了 写个总结 题目博客链接 Easy No.1 - No.21 461. 汉明距离 617. 合并二叉树 104. 二叉树的最大深度 206. 反转链表 169. 多数元素 21. 合并两个有序链表 ...

Love 6's Private Blog 1万+
上一篇: LeetCode Hot 100:矩阵
下一篇: LeetCode Hot 100:滑动窗口
UestcXiye
博客等级 码龄8年 9030粉丝 1306原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

UestcXiye

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值