哈希表习题

242. 有效的字母异位词 - 力扣(LeetCode)
思路:首先判断两个字符串长度是否相等,如果不相等return false,如果相等,设置一个数组,a~z用0~25表示,字符串s中出现就++,t中出现就--,当有元素为负数时说明s中没有这个字符,返回false。

bool isAnagram(char* s, char* t) {
    if(strlen(s)!=strlen(t)) return false;
    int hash[26]={};
    for(int i=0;i<strlen(s);i++)
    {
        hash[s[i]-'a']++;
    }
    for(int i=0;i<strlen(t);i++)
    {
        hash[t[i]-'a']--;
        if(hash[t[i]-'a']<0)return false;
    }
    return true;
}

349. 两个数组的交集 - 力扣(LeetCode)

思路:输出两个数组交集且去重,用哈希。

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

202. 快乐数 - 力扣(LeetCode)

用unordered_set取找现在的和是不是出现过,出现过说明死循环了。

class Solution {
public:
int suan(int n)
{
int t=0;
        while(n)
        {
           t+=(n%10)*(n%10);
            n=n/10;
        }
        return t;
}
    bool isHappy(int n) {
        unordered_set<int>num;
        while(1){
        int nums=suan(n);
        if(nums==1) return true;
        if(num.find(nums)==num.end())
        num.insert(nums);
        else return false;
        n=nums;
        }
    }
};

1. 两数之和 - 力扣(LeetCode)

思路:用unordered_map,来存下标,然后遍历数组,看target-nums[i]是否能在map里找到,如果能找到还要判断是不是它自己,如果不是则输出,是的话继续找,例如:6  找到的是 3,3重复位置。

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int>mp;
        for(int i=0;i<nums.size();i++)
        {
            mp[nums[i]]=i;
        }
        for(int i=0;i<nums.size();i++){
               auto ite=mp.find(target-nums[i]);
               if(ite!=mp.end() && ite->second!=i) return {ite->second,i};
        }
        return {};
        
    }
};

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值