算法训练营Day06-LeetCode242.有效的字母异位词 & 349. 两个数组的交集 & 1. 两数之和

242.有效的字母异位词

题目链接:LeetCode242.有效的字母异位词

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 st 中每个字符出现的次数都相同,则称 st 互为字母异位词。

思路:每个字符出现次数相同,说明 st 长度一样才有可能是字母异位词。通过构建一个存放26个整形元素的数组以表示 a-z 每个字母在字符串中出现的次数。遍历后数组元素均为 0 ,则 st 互为字母异位词。

视频讲解:学透哈希表,数组使用有技巧!Leetcode:242.有效的字母异位词

code:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if(s.length() != t.length()){
            return false;
        }

        int cnt[26] = {0};
        for(int i = 0; i < s.length(); i++){
            cnt[s[i] - 'a']++;
            cnt[t[i] - 'a']--;
        }

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

        return true;
    }
};

总结:用数组实现哈希表


349. 两个数组的交集

题目链接:LeetCode349. 两个数组的交集

给定两个数组 nums1nums2 ,返回 它们的 交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序

思路:输出结果元素唯一,同时可以不考虑输出结果的顺序,想到 unordered_set

参考视频:学透哈希表,set使用有技巧!Leetcode:349. 两个数组的交集

code:

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

总结:注意返回值,最后要把 set 转成 vector


1. 两数之和

题目链接:LeetCode1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

思路:不仅要知道元素有没有遍历过,还要知道这个元素对应的下标,需要使用 key-value 结构来存放,key 来存元素,value 来存下标,输出可以无序,想到 std::unordered_map

code:

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++){
            auto iter = map.find(target - nums[i]);
            if(iter == map.end()){
                map.insert(pair<int, int> (nums[i], i));
            }else{
                return {iter->second, i};
            }
        }
        return {};
    }
};

明确两点:

  • map用来做什么
  • map中key和value分别表示什么

参考文章:

C++ STL unordered_set用法整理
C++ map用法总结(整理)
代码随想录-哈希表-242.有效的字母异位词
代码随想录-哈希表-349. 两个数组的交集
代码随想录-哈希表-1. 两数之和

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值