网站免费网站免费优化优化,减粘装置设备设计要点,ps做分享类网站效果图,门户网站建设谈判目录
1、1. 两数之和 2、面试题 01.02. 判定是否互为字符重排 3、217. 存在重复元素
4、 219. 存在重复元素 II
5、49. 字母异位词分组 频繁查找某一个数的时候可以使用哈希表#xff0c;哈希表可以使用容器#xff0c;也可以使用数组模拟#xff0c;当元素是字符串中的字…目录
1、1. 两数之和 2、面试题 01.02. 判定是否互为字符重排 3、217. 存在重复元素
4、 219. 存在重复元素 II
5、49. 字母异位词分组 频繁查找某一个数的时候可以使用哈希表哈希表可以使用容器也可以使用数组模拟当元素是字符串中的字符或者数据范围很小的时候可以使用数组模拟哈希表。 1、1. 两数之和 思路哈希表边判断边插入。全部插入再判断需要判断是排除自身没有边判断边插入简洁 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};}
}; 2、面试题 01.02. 判定是否互为字符重排 思路使用一个数组模拟哈希表统计其中一个字符串然后判断另一个字符串的每个字母在哈希表中减一后如果出现次数小于0则不为重排反之则为重排。 class Solution {
public:bool CheckPermutation(string s1, string s2) {if (s1.size() ! s2.size())return false;int hash[26] {0};for (auto s : s1)hash[s - a];for (auto s : s2) {hash[s - a]--;if (hash[s - a] 0)return false;}return true;}
}; 3、217. 存在重复元素 思路借助哈希表边统计边判断。 class Solution {
public:bool containsDuplicate(vectorint nums) {unordered_setint hash;for (auto n : nums) {if (hash.count(n))return true;elsehash.insert(n);}return false;}
};
4、 219. 存在重复元素 II 思路使用哈希表统计key为元素value为下标。 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])) {if (i - hash[nums[i]] k)return true;}hash[nums[i]] i;}return false;}
};
5、49. 字母异位词分组 思路使用string作为哈希表的keyvectorstring作为哈希表的value将字符串排序后的结果同时作为key和value插入哈希表由于哈希表的value是字符串数组所以将哈希表的value导入一个数组即为结果。 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 ret;for (auto x : hash) {ret.push_back(x.second);}return ret;}
};