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

这篇具有很好参考价值的文章主要介绍了代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


哈希表能解决什么问题呢?一般哈希表都是用来快速判断一个元素是否出现集合里。

242.有效的字母异位词

题目链接
解题思路: 题目的意思就是 判断两个字符串是否由相同字母组成。
字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。
再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。
同样在遍历字符串t的时候,对t中出现的字符映射哈希表索引上的数值再做-1的操作。
那么最后检查一下,record数组如果有的元素不为零0,说明字符串st一定是谁多了字符或者谁少了字符,return false。
最后如果record数组所有元素都为零0,说明字符串st是字母异位词,return true。

代码如下:

class Solution {
public:
    bool isAnagram(string s, string t) {
        int record[26] = {0};
        for(int i = 0; i < s.size();i++){
            record[s[i] - 'a']++;
        }
        for(int j = 0; j < t.size();j++){
            record[t[j] - 'a']--;
        }

        for(int i = 0; i< 26; i++){
            if(record[i] != 0){
                return false;
            }
        }
        return true;
    }
};

349. 两个数组的交集

题目链接
解题思路:根据题目描述,需要进行去重,就想到了使用unordered_set
代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和代码如下:

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        unordered_set<int> result_set;
        unordered_set<int> nums_set(nums1.begin(), nums1.end());
        for(int num :nums2){
            if(nums_set.find(num) != nums_set.end()){
                result_set.insert(num);
            }
        }

        return vector<int>(result_set.begin(),result_set.end());
    }
};

202. 快乐数

题目链接
解题思路: 快速判断一个元素是否出现集合里的时候,就要考虑哈希法了。
题目中说了会无限循环,那么也就是说求和的过程中,sum会重复出现,判断sum是否重复出现就可以使用unordered_set

class Solution {
public:
    // 取数值各个位上的单数之和
    int getSum(int n) {
        int sum = 0;
        while (n) {
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        unordered_set<int> set;
        while(1) {
            int sum = getSum(n);
            if (sum == 1) {
                return true;
            }
            // 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return false
            if (set.find(sum) != set.end()) {
                return false;
            } else {
                set.insert(sum);
            }
            n = sum;
        }
    }
};


1. 两数之和

题目链接
解题思路: 这道题需要存放两个变量。需要使用 key value结构来存放,key来存元素,value来存下标,那么使用map正合适。
代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和代码如下:文章来源地址https://www.toymoban.com/news/detail-471281.html

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map <int,int> map;
        for(int i = 0; i < nums.size(); i++) {
            // 遍历当前元素,并在map中寻找是否有匹配的key
            auto iter = map.find(target - nums[i]); 
            if(iter != map.end()) {
                return {iter->second, i};
            }
            // 如果没找到匹配对,就把访问过的元素和下标加入到map中
            map.insert(pair<int, int>(nums[i], i)); 
        }
        return {};
    }
};

到了这里,关于代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 代码随想录二刷day35

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

    2024年02月07日
    浏览(65)
  • 代码随想录二刷day17

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 二叉树中深度指的是根节点到当前节点的节点个数, 二叉树中的高度指的是当前节点到叶子节点的节点个数 可以通前序遍历求深度 通过后序遍历求高度 递归 递归 迭代 递归 迭代 递归 递归

    2024年02月09日
    浏览(46)
  • 代码随想录二刷day16

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 递归 迭代 迭代 递归 迭代 递归 迭代 递归

    2024年02月09日
    浏览(46)
  • 二刷代码随想录——动态规划day40

    一个本硕双非的小菜鸡,备战24年秋招,计划二刷完卡子哥的刷题计划,加油! 二刷决定精刷了,于是参加了卡子哥的刷题班,训练营为期60天,我一定能坚持下去,迎来两个月后的脱变的,加油! 推荐一手卡子哥的刷题网站,感谢卡子哥。代码随想录 终于来到了守关boss。

    2024年03月11日
    浏览(57)
  • Day7代码随想录(1刷) 哈希表

    目录 454. 四数相加 II  383. 赎金信 15. 三数之和  18. 四数之和   给你四个整数数组  nums1 、 nums2 、 nums3  和  nums4  ,数组长度都是  n  ,请你计算有多少个元组  (i, j, k, l)  能满足: 0 = i, j, k, l n nums1[i] + nums2[j] + nums3[k] + nums4[l] == 0 示例 1: 示例 2:    提示: n == nums1.l

    2024年03月25日
    浏览(45)
  • 代码随想录二刷 |回溯 |分割回文串

    131.分割回文串 给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。 返回 s 所有可能的分割方案。 示例: 输入: “aab” 输出: [ [“aa”,“b”], [“a”,“a”,“b”] ] 回溯三部曲 递归函数参数 全局变量数组path存放切割后回文的子串,二维数组result存放结果集 参数

    2024年01月24日
    浏览(77)
  • 代码随想录二刷 |二叉树 | 二叉树的右视图

    199.二叉树的右视图 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例 1: 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 示例 2: 输入: [1,null,3] 输出: [1,3] 示例 3: 输入: [] 输出: [] 提示: 二叉树的节点个数的范围是 [0,1

    2024年02月04日
    浏览(60)
  • 代码随想录day6|哈希表理论基础、有效的字母异位词、两个数组的交集、快乐数、两数之和

    当需要判断一个元素是否在一个集合中,哈希表的时间复杂度只有O(1)。 哈希表有一个映射的操作,当映射的元素在同一个索引下标的位置,就会引发 哈希碰撞 。 哈希碰撞的两种解决方法:拉链法 线性探测法   同时,哈希表还有常见的三种数据结构:分别是数组、集合s

    2024年02月06日
    浏览(48)
  • 代码随想录 Day6 哈希表 哈希表理论基础, 242.有效的字母异位词, 349. 两个数组的交集,202. 快乐数,1. 两数之和

    yi  哈希表理论基础 哈希表是采用了牺牲空间换取时间,因为需要存储额外的数据。 需要快速判断一个元素是否出现在一个 数组中的时候就需要哈希法。 er  242.有效的字母异位词 本题一开始想到的是使用map,感觉是字母和数字的组合 问题:  1. 注意给\\\'a\\\'穿衣服 2.想到其实

    2024年03月09日
    浏览(47)
  • 代码随想录二刷day22 |二叉树之 235. 二叉搜索树的最近公共祖先 701.二叉搜索树中的插入操作 450.删除二叉搜索树中的节点

    235. 二叉搜索树的最近公共祖先 题目链接 解题思路:讨论 中节点 p 中节点 q 或者 中节点 q 中节点 p ,其余的情况的最近公共祖先就是根节点。 使用递归三部曲 确定递归函数返回值以及参数 参数就是当前节点,以及两个结点 p、q。 返回值是要返回最近公共祖先,所以是Tr

    2024年02月08日
    浏览(49)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包