IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> Day3(1)有效的字母异位词(2)两个数组的交集(3)202快乐数 -> 正文阅读

[数据结构与算法]Day3(1)有效的字母异位词(2)两个数组的交集(3)202快乐数

1. Leetcode 242有效的字母异位词

(1)解析

Leetcode242
参考文章

(2)思路

采用哈希表映射的思路

(3)代码

class Solution {
public:
    bool isAnagram(string s, string t) {
        int maplist[26] = {0};
        for(int i = 0; i < s.size(); ++i)
            maplist[s[i]- 'a'] += 1;
        for(int i = 0; i < t.size(); ++i)
            --maplist[t[i] - 'a'];
        for(int i = 0; i < 26; ++i)
        {
            if(maplist[i] != 0)
                return false;
        }
        return true;
    }
};

(4)总结

字母数量有限,考虑到用数组做哈希表

2. Leetcode 349两个数组的交集

(1)解析

Leetcode349
参考文章

(2)思路

这道题目没有限制数值的大小,就无法使用数组来做哈希表了,
如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,可以对数据去重,所以选择unordered_set

(3)代码

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

(4)总结

数值是否有限来判断采用哪种形式的哈希表,unordered_set可以去重

3. Leetcode 202快乐数

(1)解析

Leetcode202
参考文章

(2)思路

无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法了,判断sum是否重复出现就可以使用unordered_set

(3)代码

class Solution {
public:
    int getNum(int n)
    {
        int sum = 0;
        while(n)
        {
            sum += (n%10) * (n%10);
            n = n/10;
        }
        return sum;
    }
    bool isHappy(int n) {
        int num = getNum(n);
        unordered_set<int> numset;
        while(1)
        {
            if(num == 1)
                return true;
            num = getNum(num);
            if(numset.find(num) != numset.end())
                return false;
            numset.insert(num);
        }
    }
};

(4)总结

只有判断新生成的sum没有重复出现,才能insert到numset集合中

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:49:40  更:2022-11-05 00:53:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:47:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码