day6 哈希 有效的字母异位词 两个数组的交集 快乐数 两数之和

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

- day5周日休息
---


哈希表
- 什么时候用
    - 需要记录对比数据,判断数据是否在集合里面
- 哈希三种形式
    1. 数组
        - 记录一个数
        - 已知长度,belike 26个字母
        - 已知最大长度,且长度较小,belike 1 <= num <= 1000
    2. set
        - 记录一个数
        - 除了数组外的其它
            - 用数组的地方用set也可以,但是浪费
    1. map
        - 记录一组数,需要用key->value,belike 数组通过数值判断下标
    - 用不用 unordered,看哈希表需不需要顺序记录
  ---


- 有效的字母异位词
    - 26个字母,用数组即可
```cpp
class Solution {
public:
    bool isAnagram(string s, string t) {
        int table[26] {0};
        for (int i = 0; i < s.size(); i++) {
            table[s[i] - 'a']++;
        }
        for (int i = 0; i < t.size(); i++) {
            table[t[i] - 'a']--;
        }
        for (int i = 0; i < 26; i++) {
            if (table[i])
                return false;
        }
        return true;
    }
};
```

- 两个数组的交集
    -  `0 <= nums1[i], nums2[i] <= 1000`,用数组即可
    - unordered_set记录出现过的数字,这样就不会重复记录,如果用数字,会出现`[2,2]`这种结果
```cpp
class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        int hash[1001] {0};
        unordered_set<int> ret;
        for (int i : nums1) {
            hash[i]++;
        }
        for (int i : nums2) {
            if (hash[i]) {
                ret.insert(i);
            }
        }
        return vector<int>(ret.begin(), ret.end());
    }
};
```

- 快乐数
    - O(log n)
        - 计算出第一个平方和的时间是log n,再下一个是log log n,取大头所以是log n
    - 平方后的数有两种情况
        - 为1
        - 无限循环,即会出现与之前相同的数,所有用哈希表记下来,每次对比是否出现重复即可
    - 不知道到底多次,记录一个数,用set
```cpp
class Solution {
public:
    int getQuartSum(int n) {
        int sum = 0;
        while (n) {
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        unordered_set<int> record;
        while (1) {
            int quartSum = getQuartSum(n);
            if (quartSum == 1) return true;
            if (record.count(quartSum)) {
                return false;
            }
            record.insert(quartSum);
            n = quartSum;
        }
    }
};
```

- 两数之和
    - 找俩数相加为target,即在遍历到num时,过去已经遍历的数是否存在 target - num
    - 返回下标,即通过数值寻找对于的下标,即key -> val,用map
```cpp
class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> map;
        for (int i = 0; i < nums.size(); i++) {
            auto it = map.find(target - nums[i]);
            if (it != map.end()) {
                return {it->second, i};
            }
            map.insert(make_pair(nums[i], i));
        }
        return {};
    }
};
```文章来源地址https://www.toymoban.com/news/detail-603466.html

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

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

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

相关文章

  • Day 6 哈希表part01:242.有效的字母异位词 , 349. 两个数组的交集 , 202. 快乐数, 1. 两数之和

    哈希表理论基础  要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。   什么时候想到用哈希法,当我们遇到了 要快速判断一个元素是否出现集合里的时候 ,就要考虑 哈希法 。  这句话很重要,大家在做哈希表题目都要思考这

    2024年02月15日
    浏览(39)
  • 代码随想录二刷 day06 | 哈希表之 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

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

    2024年02月07日
    浏览(36)
  • 力扣 | 哈希表1 | 242.有效的字母异位词,349.两个数组的交集,202.快乐数,1.两数之和

    目录 理论基础 242.有效的字母异位词 349.两个数组的交集 202.快乐数 1.两数之和 哈希表用来判断一个元素是否出现在集合里(判断一个元素是否出现过)。 牺牲空间换时间,会使用到额外的空间。 又称散列表,key-value,根据key值来访问 (数组就是简单的哈希表,但是数组的大

    2024年02月21日
    浏览(30)
  • 算法训练第5天|哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

    哈希表是根据 关键码 的值而直接进行访问的数据结构。 一般哈希表都是用来快速判断一个元素是否出现集合里。 数组、集合set、映射map 力扣链接 题目描述: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意: 若  s  和  t   中每个字符出现的

    2024年02月19日
    浏览(34)
  • 代码随想录第6天| 哈希表理论基础 ,LeetCode242.有效的字母异位词,LeetCode349. 两个数组的交集,LeetCode202. 快乐数,LeetCode1. 两数之和

    哈希表(散列表)理论基础 : 哈希表是根据关键码的值而直接进行访问的数据结构。 直白来讲其实数组就是一张哈希表。   什么时候想到用哈希法, 当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法 。 当我们遇到了要快速判断一个元素是否出现集

    2024年02月10日
    浏览(41)
  • 算法刷题-哈希表-有效的字母异位词

    数组就是简单的哈希表,但是数组的大小可不是无限开辟的 力扣题目链接 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true 示例 2: 输入: s = “rat”, t = “car” 输出: false 说明: 你可以假设字符串只包

    2024年02月09日
    浏览(33)
  • 【代码随想录-哈希表】有效的字母异位词

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月21日
    浏览(33)
  • 438. 找到字符串中所有字母异位词【异位词-哈希数组】

    438. 找到字符串中所有字母异位词 给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。 异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。 示例 1: 输入: s = “cbaebabacd”, p = “abc” 输出: [0,6] 解释: 起

    2023年04月27日
    浏览(31)
  • 【力扣】349. 两个数组的交集 <哈希>

    给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 输出:[2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出:[9,4] 解释:[4,9] 也是可通过的 提示: 1 = nums1.l

    2024年02月11日
    浏览(27)
  • LeetCode题:581. 最短无序连续子数组,242. 有效的字母异位词,202. 快乐数

    581. 最短无序连续子数组 给你一个整数数组  nums  ,你需要找出一个  连续子数组  ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。 请你找出符合题意的  最短  子数组,并输出它的长度。 示例 1: 示例 2: 示例 3: 提示: 1 = nums.length = 104 -105 = num

    2024年02月05日
    浏览(26)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包