当前位置: 首页 > news >正文

代码随想录算法训练营Day06 | 哈希表理论基础 、242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

文章目录

  • 哈希表理论基础
  • 242.有效的字母异位词
    • 思路与重点
  • 349. 两个数组的交集
    • 思路与重点
  • 202. 快乐数
    • 思路与重点
  • 1. 两数之和
    • 思路与重点

哈希表理论基础

  • 讲解链接:代码随想录 (programmercarl.com)

242.有效的字母异位词

  • 题目链接:242. 有效的字母异位词 - 力扣(LeetCode)
  • 讲解链接:代码随想录 (programmercarl.com)
  • 状态:一遍AC。

思路与重点

  • 定义一个数组叫做record用来上记录字符串s里字符出现的次数
class Solution {
public:bool isAnagram(string s, string t) {int record[26] = {0};for (int i = 0; i < s.size(); i++) {// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了record[s[i] - 'a']++;}for (int i = 0; i < t.size(); i++) {record[t[i] - 'a']--;}for (int i = 0; i < 26; i++) {if (record[i] != 0) {// record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。return false;}}// record数组所有元素都为零0,说明字符串s和t是字母异位词return true;}
};

349. 两个数组的交集

  • 题目链接:349. 两个数组的交集 - 力扣(LeetCode)
  • 讲解链接:代码随想录 (programmercarl.com)
  • 状态:一遍AC。

思路与重点

  • 选择unordered_set来解决。
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result_set; // 存放结果,之所以用set是为了给结果集去重unordered_set<int> nums_set(nums1.begin(), nums1.end());for (int num : nums2) {// 发现nums2的元素 在nums_set里又出现过if (nums_set.find(num) != nums_set.end()) {result_set.insert(num);}}return vector<int>(result_set.begin(), result_set.end());}
};

202. 快乐数

  • 题目链接:202. 快乐数 - 力扣(LeetCode)
  • 讲解链接:代码随想录 (programmercarl.com)
  • 状态:直接看题解了。

思路与重点

  • 这道题目使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。
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 falseif (set.find(sum) != set.end()) {return false;} else {set.insert(sum);}n = sum;}}
};

1. 两数之和

  • 题目链接:1. 两数之和 - 力扣(LeetCode)
  • 讲解链接:代码随想录 (programmercarl.com)
  • 状态:直接看题解了。

思路与重点

  • 本题其实有四个重点:
    • 为什么会想到用哈希表
    • 哈希表为什么用map
    • 本题map是用来存什么的
    • map中的key和value用来存什么的
class Solution {
public:vector<int> twoSum(vector<int>& nums, int target) {std::unordered_map <int,int> map;for(int i = 0; i < nums.size(); i++) {// 遍历当前元素,并在map中寻找是否有匹配的keyauto iter = map.find(target - nums[i]); if(iter != map.end()) {return {iter->second, i};}// 如果没找到匹配对,就把访问过的元素和下标加入到map中map.insert(pair<int, int>(nums[i], i)); }return {};}
};

http://www.mrgr.cn/news/27070.html

相关文章:

  • GEE 按范围导出 Sentinel-2 卫星影像
  • spark里使用geohash处理数据之线程安全问题
  • 极越造车2.0:01销量回暖,07杀出血路,ASD抢跑FSD
  • 深入理解指针(二)
  • Python中给定一个数组a = [2,3,9,1,0],找出其中最大的一个数,并打印出来 求解?
  • 大数据新视界 --大数据大厂之Kafka消息队列实战:实现高吞吐量数据传输
  • 36岁,大厂女程序员,中年失业后,我开始接受自己的平凡,并深耕自己
  • element-plus表单使用show-overflow-tooltip,避免占满屏幕,需要设置宽度
  • supermap icilent3d for cesium加载地形并夸大地形
  • Python实现牛顿法 目录
  • self与方法
  • PD虚拟机占用多少内存?使用电脑的虚拟内存会损害电脑吗
  • linux 操作系统下cupsdisable命令介绍和使用案例
  • AtCoder ABC367 A-D题解
  • 建筑机器人通用操作系统设计方案
  • xshell密钥方式连接阿里云Linux
  • PCM的缺点
  • python基础知识 (五)--容器、索引、切片、字符串的遍历、查找、修改元素
  • Redis实现发布/订阅功能(实战篇)
  • 高级java每日一道面试题-2024年9月11日-数据库篇-事务回滚的常见原因有哪些?