代码随想录算法训练营第六天|242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

242.有效的字母异位词

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文档讲解:代码随想录
视频讲解:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词_哔哩哔哩_bilibili

思路:在遇到需要判断一个元素是否出现在集合中时,考虑使用哈希法,题目限定数组中的元素为小写字母,故可虑使用数组来作为哈希表。

C++代码:

class Solution {
public:
    bool isAnagram(string s, string t) {
        int rslt[26] = {};
        //获取s的字符出现个数
        for(int i = 0; i < s.size(); i++){
            rslt[s[i] - 'a']++;
        }
        //获取t的字符出现个数
        for(int i = 0; i < t.size(); i++){
            rslt[t[i] - 'a']--;
        }

        for(int i = 0; i < 26; i++){
            if(rslt[i] != 0)
                return false;
        }
        return true;
    }
};

349. 两个数组的交集

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文档讲解:代码随想录
视频讲解:学透哈希表,set使用有技巧!Leetcode:349. 两个数组的交集_哔哩哔哩_bilibili

思路:题目限定输出元素不能重复且可以无序,故使用unordered_set作为哈希表

C++代码:

class Solution {
public:
    vector intersection(vector& nums1, vector& nums2) {
        unordered_set rslt;
        unordered_set set1(nums1.begin(), nums1.end());
        
        for(int i = 0; i < nums2.size(); i++){
            //查看nums2中元素是否在nums1的哈希表中出现
            if(set1.find(nums2[i]) != set1.end())
                rslt.insert(nums2[i]);
        }

        return vector(rslt.begin(), rslt.end());
    }
};

202. 快乐数

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文档讲解:代码随想录

思路:题目中说了会无限循环,在求和过程中sum一定会重复

C++代码:

class Solution {
public:
    //获取数字的每位的平方和
    int getSum(int num){
        int sum = 0;

        while(num){
            sum += (num % 10) * (num % 10);
            num /= 10;
        }
        return sum;
    }
    bool isHappy(int n) {
        unordered_set rslt;

        while(1){
            int sum = getSum(n);
            if(sum == 1)
                return true;
            if(rslt.find(sum) != rslt.end())
                return false;
            else
                rslt.insert(sum);
            n = sum;
        }
    }
};

1. 两数之和  

题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
文档讲解:代码随想录
视频讲解:梦开始的地方,Leetcode:1.两数之和,学透哈希表,map使用有技巧!_哔哩哔哩_bilibili

思路:当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法

C++代码:

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        //key:nums[index]
        //value:index
        unordered_map rslt;

        for(int i = 0; i < nums.size(); i++){
            auto tmp = rslt.find(target - nums[i]);
            if(tmp != rslt.end())
                return {tmp->second, i};
            rslt.insert(pair(nums[i], i)); 
        }
        return {};
    }
};

你可能感兴趣的:(代码随想录算法训练营,算法)