首页 > 其他分享 >代码随想录day6 哈希表 LeetCode 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

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

时间:2023-01-02 21:34:37浏览次数:46  
标签:202 hash int 随想录 num vector result 哈希 两数

当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法

242.有效的字母异位词

 https://leetcode.cn/problems/valid-anagram/

由于哈希表只有26个元素,故采用数组做哈希表比较合适。

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

349. 两个数组的交集

https://leetcode.cn/problems/intersection-of-two-arrays/submissions/

第一种方法,用unordered_set做哈希表,效率较高,当用数组当哈希表下标数值大时需要选择这种方法

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

    }
};

第二种方法,这道题由于数值设计较小,也可用数组来做哈希表。

class Solution {
public:
    vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
        int hash[1001]={0};//注意需要初始化,不初始化oj会随机取值
        unordered_set<int>result;
        for(int num1:nums1){
            hash[num1]=1;
        }
        for(int num2:nums2){
            if(hash[num2]==1)result.insert(num2);//这里还需要去重
        }
        return vector<int>(result.begin(),result.end());
    }
};

 202.快乐数

https://leetcode.cn/problems/happy-number/submissions/

这道题中如果不是快乐数就无限循环,说明肯定会出现原先出现的数,当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。这道题数值也比较大,所以用了set做哈希表

class Solution {
public: 
    bool isHappy(int n) {
        unordered_set<int>hash;
        while(n!=1){
            hash.insert(n);
            int n1=0;
            while(n){
                int a=n%10;
                n1+=a*a;
                n/=10;
            }
            n=n1;
            if(hash.find(n)!=hash.end())return 0;
        }
        return 1;
    }
};

1. 两数之和  

https://leetcode.cn/problems/two-sum/submissions/

这道题可以用时间复杂度O(n^2)的暴力法,也可以用哈希法

利用map存储遍历过的元素,key为元素的值,value为下标,每次循环都调用一下map的查找。

class Solution {
public:
  vector<int> twoSum(vector<int>& nums, int target) {
      vector<int>result;
    int i=0;
    map<int,int>hash;
    for(int num:nums){
        if(hash.find(target-num)!=hash.end()){
           return{hash.find(target-num)->second,i};
        }
        hash.insert(make_pair(num,i++));
    }
    return {};
  }
};

 

标签:202,hash,int,随想录,num,vector,result,哈希,两数
From: https://www.cnblogs.com/zhishikele/p/17019815.html

相关文章

  • 2023/01 LeetCode练习
    ......
  • 2023,整装待发!
    我是个怎么样的人呢.....高考过后,我常常断断续续的思索这些。但是对刚刚“解放”的我来说,思考这些还是过于疲惫和自找不快的一件事。所以就这样遗忘了,在混沌与半清醒......
  • HashMap-2023-1-2
    packageCollection;importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;importjava.util.Set;publicclassMapTest{publicMap<String,Stu......
  • 月薪集中在8k-17k、厌倦大小周、近三成的人没有跳槽过,2021-2022中国开发者调查报告发
    月薪集中在8k-17k、厌倦大小周、近三成的人没有跳槽过,2021-2022中国开发者调查报告发布「学不完的技术,跟不动的技术潮流」,过去一年,随着数字化、智能化趋势的来临,无论是传统......
  • 2023年跨年演讲对技术人的一点启发
    前言故事1.电动车与书店罗胖点评大叔点评故事2.《螃蟹与红酒》罗胖点评大叔点评故事3.《甘地与糖》罗胖点评大叔点评故事4.《60秒与10年》罗胖点评......
  • 代码随想录算法训练营第六天
    今日刷题4道:先复习了哈希表理论基础,然后刷了4道题。242.有效的字母异位词,349.两个数组的交集,202.快乐数,1.两数之和。为什么没有第5天呢,因为周日休息!ps:什么时候想到用......
  • 2023/1/2 周报
    周报本周总结​ 最近状态不佳,特别是打abc的时候,总感觉就是刷了很多题,但是就是不会写,赛后被人一启发就能知道怎么写并且写出来,让我想是不是自己的刷题方式有问题,太过于依......
  • SZTUACM寒假周报(2022.12.24~2023.1.1)
    SZTUACM寒假周报(2022.12.24~2023.1.1)杂项——搜索专题知识整理前言:因为之前搜索学得很随意,知识点很杂,加上期末一直在赶ddl,投入训练时间很少,所以本周决定整理一下有关搜......
  • 2023.1.2 No.5 新年
    距离上一次写日记过去了一个多月了,我12月初回的家,带着一大堆的实验报告。但是谁也没想到刚回家一周不到就放开了,12月中旬我母亲感染,几天后我也跟着感染。回家后摆烂导......
  • 2023.1.1
    昨天决定记录一下每天的琐碎以及获得的知识,但是呢,毕竟很懒,所以,第一天计划就搁浅了,哈哈。补吧,能写几天是几天毕竟是回忆么,就没有琐碎日常了。今天(1.1)晚上看了阿玮的Java的基......