【力扣二刷思路】DAY5

这篇具有很好参考价值的文章主要介绍了【力扣二刷思路】DAY5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

53. 最大子数组和

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

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

思路

  1. 初始化变量:在开始时,将存储最大子数组和的 ans 初始化为整型的最小值 INT_MIN,将当前累加的子数组和 total 初始化为 0。

  2. 遍历数组:使用范围-based for 循环遍历给定的整数数组 nums

  3. 累加求和:在每一次循环中,将当前元素 num 加到 total 中,这样就得到了当前的子数组和。

  4. 更新最大子数组和:在每次累加后,使用 max() 函数更新 ans,取当前的 total 和之前的 ans 中的较大值,确保 ans 始终存储最大的子数组和。

  5. 处理负数情况:如果当前累加的子数组和 total 小于 0,说明当前子数组的和已经对结果没有正向贡献了,因此将 total 置为 0,重新开始累加。

贪心算法的思路非常简单直观,它不需要考虑所有可能的子数组,而是通过每一步的局部最优解来推导全局最优解,因此在一次遍历中就可以得到结果,从而实现了高效的求解。

题解

class Solution {
public:
    int maxSubArray(const vector<int>& nums) {
        int ans = INT32_MIN; // 存储最大子数组和的结果,初始化为整型的最小值
        int total = 0; // 存储当前累加的子数组和
        for (int num : nums) { // 使用范围-based for 循环遍历 nums 数组
            total += num; // 将当前元素加到 total 中
            ans = max(total, ans); // 更新 ans,取当前的 total 和之前的 ans 中的较大值
            if (total < 0) // 如果子数组和为负数
                total = 0; 
        }
        return ans; 
    }
};

1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

思路

  1. 在函数内部,创建了一个名为 hash 的无序映射(unordered_map),用于存储数组元素和其索引的键值对关系。在创建哈希表时,通过 nums.size() 来初始化哈希表的大小,这样可以避免不必要的内存重新分配,提高效率。

  2. 使用范围for循环遍历整数数组 nums。对于数组中的每个元素 num,执行以下操作:

    • 计算目标值与当前元素之差:target - num,并在哈希表中查找是否存在这个差值对应的索引。

    • 如果存在,则说明在当前元素之前已经遍历过另一个元素,其值加上当前元素的值等于目标值。此时直接返回这两个索引构成的向量 {hash[diff], index},其中 hash[diff] 是另一个元素的索引,index 是当前元素的索引。

    • 如果不存在,则将当前元素及其索引加入哈希表中,以便后续查找。同时,将 index 的值递增,用于记录下一个元素的索引。

只需遍历一次数组,并在哈希表中进行常数时间的查找操作,所以整体效率很高。文章来源地址https://www.toymoban.com/news/detail-842737.html

题解

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> hash(nums.size()); // 初始化哈希表大小
        int index = 0; // 记录当前元素的索引
        for (int num : nums) {
            int diff = target - num; // 计算目标值与当前元素之差
            if (hash.find(diff) != hash.end())
                return {hash[diff], index}; // 直接返回满足条件的索引
            hash[num] = index++; // 将当前元素及其索引加入哈希表
        }
        return {};
    }
};

到了这里,关于【力扣二刷思路】DAY5的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

    哈希表能解决什么问题呢?一般哈希表都是用来快速判断一个元素是否出现集合里。 242.有效的字母异位词 题目链接 解题思路: 题目的意思就是 判断两个字符串是否由相同字母组成。 字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。

    2024年02月07日
    浏览(50)
  • ● day5:哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

    ● 哈希表理论基础 ● 242.有效的字母异位词 ● 349. 两个数组的交集 ● 202. 快乐数 ● 1. 两数之和 哈希表理论基础 建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。 什么时候想到用哈希法, 当我们遇到了要快速判断一

    2024年02月05日
    浏览(57)
  • 【Day28】力扣算法(超详细思路+注释) [1790. 仅执行一次字符串交换能否使两个字符串相等 ] [328. 奇偶链表 ][148. 排序链表]

    原题链接:1790. 仅执行一次字符串交换能否使两个字符串相等 题目描述 : 给你长度相等的两个字符串 s1 和 s2 。一次 字符串交换操作的步骤如下:选出某个字符串中的两个下标(不必不同),并交换这两个下标所对应的字符。 如果对 其中一个字符串 执行 最多一次字符串交

    2024年01月22日
    浏览(44)
  • 【迎战蓝桥】 算法·每日一题(详解+多解)-- day5

    🤞目录🤞 💖1. 数组中出现次数超过一半的数字 💖2. 二进制中1的个数 💖3. 替换空格 【大家好,我是 爱干饭的猿 ,如果喜欢这篇文章, 点个赞 👍, 关注一下吧, 后续会一直分享题目与算法思路 】 描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长

    2023年04月08日
    浏览(40)
  • 【leetcode 力扣刷题】数学题之除法:哈希表解决商的循环节➕快速乘求解商

    题目链接:166. 分数到小数 题目内容: 题目是要我们把一个分数变成一个小数,并以字符串的形式返回。按道理,直接将分子numerator除以分母denominator就得到了小数,转换成string返回就好。题目要求里指出了特殊情况—— 小数部分如果有循环,就把循环节括在括号里 。 那么

    2024年02月10日
    浏览(40)
  • 数据结构刷题篇 之 【力扣二叉树基础OJ】详细讲解(含每道题链接及递归图解)

    有没有一起拼用银行卡的,取钱的时候我用,存钱的时候你用 难度等级:⭐ 直达链接:相同的树 难度等级:⭐ 直达链接:单值二叉树 难度等级:⭐⭐ 直达链接:对称二叉树 难度等级:⭐⭐⭐ 直达链接:二叉树的前序遍历 难度等级:⭐⭐⭐⭐ 直达链接:另一颗子树 注:

    2024年04月16日
    浏览(80)
  • day19【LeetCode力扣】160.相交链表

    1.题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交**:** 题目数据 保证 整个链式结构中不存在环。 注意 ,函数返回结果后,链表必须 保持其原始结构

    2024年01月18日
    浏览(40)
  • java黑马头条 day5自媒体文章审核 敏感词过滤算法DFA 集成RabbitMQ实现自动审核

      做为内容类产品,内容安全非常重要,所以需要进行对自媒体用户发布的文章进行审核以后才能到app端展示给用户。2 WmNews 中 status 代表自媒体文章的状态 status字段:0 草稿 1 待审核 2 审核失败 3 人工审核 4 人工审核通过   8 审核通过(待发布) 9 已发布 当自媒体用户提交

    2024年02月06日
    浏览(41)
  • 二刷力扣--二叉树(2)

    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 使用递归解决。 确定函数参数和返回值 函数参数为当前节点cur。无返回值。 确定终止条件。当前节点为空则终止。 单层逻辑 反转当前节点的左右,然后递归调用cur.left, cur.right 完整代码如下: 给你一个二

    2024年02月07日
    浏览(47)
  • 力扣python刷题day03|LeetCode203、707、206

    题目 题目链接:203:移除链表元素 方法一: 知识点: 设置虚拟头结点 题目 来源:力扣(LeetCode) 提示: 0 = index, val = 1000 请不要使用内置的 LinkedList 库。 调用 get、addAtHead、addAtTail、addAtIndex 和 deleteAtIndex 的次数不超过 2000 。 方法一:单链表法 方法二:双链表法 (有点难

    2024年02月16日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包