DAY5 哈希表part01

 

 

今日任务

●  哈希表理论基础

●  242.有效的字母异位词

●  349. 两个数组的交集

●  202. 快乐数

●  1. 两数之和

 哈希表理论基础

1、哈希表用于快速判断一个元素是否出现在集合当中

2、哈希函数和哈希碰撞(拉链法和线性探测法)

3、哈希结构(数组集合和映射)以及他们的用法

4、哈希表是一种牺牲空间换时间的数据结构

242.有效的字母异位词

 1 class Solution {
 2 public:
 3     bool isAnagram(string s, string t) {
 4         int lens=s.size();
 5         int lent=t.size();
 6         int record[26]={0};
 7         if(lens!=lent) return false;
 8         for(int i=0;i<lens;i++)
 9         {
10             record[s[i]-'a']++;
11         }
12 
13         for(int i=0;i<lent;i++)
14         {
15             record[t[i]-'a']--;
16         }
17 
18         for(int i=0;i<26;i++)
19         if(record[i]!=0) return false;
20 
21         return true;
22     }
23 };

 

两个数组的交集

 1 class Solution {
 2 public:
 3     vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
 4         unordered_set<int> result;
 5         unordered_set<int> nums(nums1.begin(),nums1.end());//使用unordered——set
 6 
 7         for(int num:nums2)
 8         {
 9             if(nums.find(num)!=nums.end())
10                 result.insert(num);
11         }
12         return vector<int>(result.begin(),result.end());
13     }
14 };

●  快乐数

注意求和函数的书写

 1 class Solution {
 2 public:
 3     bool isHappy(int n) {
 4      int sum=getsum(n);
 5      unordered_set<int> sums;
 6      while(sum!=1)
 7      {
 8         sums.insert(sum);
 9         sum=getsum(sum);
10         
11         if(sums.find(sum)!=sums.end()) return false;
12      }
13      return true;
14 
15     }
16     int getsum(int n)
17     {
18         int sum=0;
19         while(n)
20         {
21             sum+=(n%10)*(n%10);
22             n/=10;
23         }
24         return sum;
25     }
26 };

1. 两数之和

题目链接/文章讲解/视频讲解:https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html

本题使用map,熟悉具体操作如find,insert(pair<int,int>(iter1,iter2)) , iter->first/second

思路比较难想,由于不能使用重复的元素,实际上map存遍历过的,防止出现重复使用的情况

 1 class Solution {
 2 public: 
 3     vector<int> twoSum(vector<int>& nums, int target) {
 4         std::unordered_map <int,int> map;
 5         for(int i=0;i<nums.size();i++)
 6             {auto iter=map.find(target-nums[i]);
 7             if(iter!=map.end())
 8                 return {iter->second,i};
 9             else map.insert(pair<int,int>(nums[i],i));
10             }
11         return {};
12     }
13 };

 

 

posted @ 2024-07-23 11:05  xzdmzrc  阅读(1)  评论(0编辑  收藏  举报