做网站最好的公司有哪些,微商城和小程序区别,东莞南城,影响关键词优化的因素文章目录 两数之和判断是否互为字符重排存在重复元素存在重复元素字母异位词分组 本文总结的是关于哈希表常见的算法
哈希表其实就是一个存储数据的容器#xff0c;所以其实它本身的算法难度并不高#xff0c;只是利用哈希表可以对于一些场景进行优化
两数之和 class Solut… 文章目录 两数之和判断是否互为字符重排存在重复元素存在重复元素字母异位词分组 本文总结的是关于哈希表常见的算法
哈希表其实就是一个存储数据的容器所以其实它本身的算法难度并不高只是利用哈希表可以对于一些场景进行优化
两数之和 class Solution
{
public:vectorint twoSum(vectorint nums, int target) {// 把数都丢到哈希表中哈希表的意义是元素及其对应的下标unordered_mapint, 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};}
};判断是否互为字符重排 class Solution
{
public:bool CheckPermutation(string s1, string s2) {int hash1[26] {0};for(auto e : s1)hash1[e - a];for(auto e : s2)hash1[e - a]--;for(int i 0; i 26; i)if(hash1[i])return false;return true;}
};存在重复元素 class Solution
{
public:bool containsDuplicate(vectorint nums) {unordered_mapint, int dict;for(auto e : nums)dict[e];for(auto e : nums)if(dict[e] ! 1)return true;return false;}
};其实是可以优化的不需要看出现了几次这个题只关心有没有的问题因此使用set就可以了
class Solution
{
public:bool containsDuplicate(vectorint nums) {unordered_setint hash;for(auto e : nums)if(hash.count(e)) return true;else hash.insert(e);return false;}
};存在重复元素 class Solution
{
public:bool containsNearbyDuplicate(vectorint nums, int k){unordered_mapint, int hash;for (int i 0; i nums.size(); i){if (hash.count(nums[i]) abs(hash[nums[i]] - i) k){return true;}else{hash[nums[i]] i;}}return false;}
};字母异位词分组 class Solution
{
public:vectorvectorstring groupAnagrams(vectorstring strs) {unordered_mapstring, vectorstring hash;// 把数据拿进去for(auto s : strs){string tmp s;sort(tmp.begin(), tmp.end());hash[tmp].push_back(s);}// 再取出来vectorvectorstring res;for(auto [x, y] : hash){res.push_back(y);}return res;}
};这里主要是说明哈希表中是可以存储其他内容的同时也体现出泛型编程的强大之处