Leetcode算法之哈希表

目录

  • 1.两数之和
  • 2.判定是否互为字符重排
  • 3.存在重复元素I
  • 4.存在重复元素II
  • 5.字母异位词分组

1.两数之和

两数之和
Leetcode算法之哈希表_第1张图片

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int,int> hash;
        for(int i=0;i<nums.size();i++)
        {
            int x = target-nums[i];
            if(hash.count(x)) return {hash[x],i};
            hash[nums[i]] = i;
        }
        //照顾编译器
        return {-1,-1};
    }
};

2.判定是否互为字符重排

判定是否互为字符重排
Leetcode算法之哈希表_第2张图片

class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if(s1.size()!=s2.size()) return false;
        int hash[26] = {0};//使用数组模拟哈希表
        //将s1放入哈希表中
        for(auto ch:s1)
        {
            hash[ch-'a']++;
        }
        //判断s2
        for(auto ch:s2)
        {
            if(--hash[ch-'a']<0) return false;
        }
        return true;
    }
};

3.存在重复元素I

存在重复元素
Leetcode算法之哈希表_第3张图片

class Solution {
public:
    bool containsDuplicate(vector<int>& nums) {
        unordered_set<int> hash;
        for(auto x:nums)
        {
            if(hash.count(x)) return true;
            hash.insert(x);
        }
        return false;
    }
};

4.存在重复元素II

存在重复元素II
Leetcode算法之哈希表_第4张图片

class Solution {
public:
    bool containsNearbyDuplicate(vector<int>& nums, int k) {
        unordered_map<int,int> hash;
        for(int i=0;i<nums.size();i++)
        {
            if(hash.count(nums[i]))
            {
                if(i-hash[nums[i]]<=k)
                {
                    return true;
                }
            }
            hash[nums[i]] = i;
        }
        return false;
    }
};

5.字母异位词分组

字母异位词分组
Leetcode算法之哈希表_第5张图片

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string,vector<string>> hash;
        vector<vector<string>> ret;
        //排序
        for(auto &s:strs)
        {
            string tmp = s;
            sort(tmp.begin(),tmp.end());
            hash[tmp].push_back(s);
        }
        //提取出哈希表中的字符数组
        for(auto& [x,y]:hash)
        {
            ret.push_back(y);
        }
        return ret;
    }
};

你可能感兴趣的:(算法,哈希算法,散列表,算法)