10天搞定网站开发,中国建设银行官网网址多少,网站内做关键词连接,网站网页设计前言目录 两数之和
面试题 01.02. 判定是否互为字符重排 存在重复元素 存在重复元素 II
字母异位词分组 两数之和 1. 两数之和 思路1#xff1a;两层for循环
思路2#xff1a;逐步添加哈希表
思路3#xff1a;一次填完哈希表 如果一次填完#xff0c;那么相同元素的值…目录 两数之和
面试题 01.02. 判定是否互为字符重排 存在重复元素 存在重复元素 II
字母异位词分组 两数之和 1. 两数之和 思路1两层for循环
思路2逐步添加哈希表
思路3一次填完哈希表 如果一次填完那么相同元素的值所映射的下标是最后一个的然而并不会导致代码出问题不管 i 是正向还是反向遍历原因1只需要能找到num的下标就行2对于num target / 2 时 当前元素不影响说结果就是这里的覆盖并不影响因为思路2也是会覆盖掉之前出现过的元素 细节当前下标不能和 hash[num] 相同 反例{1 3 4} target 6也就是当前元素只有一个且为 target / 2这时候可能出错 参考代码2
class Solution1 {
public:vectorint twoSum(vectorint nums, int target) {unordered_mapint, int hash;hash[nums[0]] 0;for (int i 1; i nums.size(); i){int num target - nums[i];if (hash.count(num)) return { hash[num], i };hash[nums[i]] i;}return { -1, -1 };}
}; 参考代码3
class Solution1 {
public:vectorint twoSum(vectorint nums, int target) {unordered_mapint, int hash;int n nums.size();for (int i 0; i n; i)hash[nums[i]] i;//for (int i 0; i n; i)for (int i n - 1; i 0; i--){int num target - nums[i];if (hash.count(num) hash[num] ! i)return { i, hash[num] };}return { -1, -1 };}
};
面试题 01.02. 判定是否互为字符重排 面试题 01.02. 判定是否互为字符重排 思路1两个数组一个去比较另一个 思路2一个数组去比较0 思路3sort排序string sort要求是的一个可以下标随机访问的容器string重载了[]
参考代码 两个数组
class Solution {
public:bool CheckPermutation(string s1, string s2) {if (s1.size() ! s2.size()) return false;int hash1[26] { 0 }, hash2[26] { 0 };for (auto e : s1)hash1[e - a];for (auto e : s2)hash2[e - a];for (int i 0; i 26; i)if (hash1[i] ! hash2[i])return false;return true;}
};
一个数组
class Solution {
public:bool CheckPermutation(string s1, string s2) {if (s1.size() ! s2.size()) return false;int hash[26] { 0 };for (auto e : s1)hash[e - a];for (auto e : s2)//也可以在里面判断hash[e - a]--;for (int i 0; i 26; i)if (hash[i] 0) return false;return true;}
}; sort
class Solution {
public:bool CheckPermutation(string s1, string s2) {if (s1.size() ! s2.size()) return false;sort(s1.begin(), s1.end());sort(s2.begin(), s2.end());return s1 s2;}
}; 存在重复元素 217. 存在重复元素 参考代码
class Solution {
public:bool containsDuplicate(vectorint nums) {unordered_mapint, int hash;for (auto e : nums)if (hash.count(e)) return true;else hash[e];return false;}
}; 存在重复元素 II
219. 存在重复元素 II 参考代码
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]) hash[nums[i]] k i) return true;hash[nums[i]] i;}return false;}
};
字母异位词分组
49. 字母异位词分组 对于往ret里压数据是参考资料的原来是这么想的但是不对hash只会用一点还没学。。 参考代码
class Solution {
public:vectorvectorstring groupAnagrams(vectorstring strs) {unordered_mapstring, vectorstring hash;for(auto e : strs){string tmp e;sort(tmp.begin(), tmp.end());hash[tmp].push_back(e);}vectorvectorstring ret;unordered_mapstring, vectorstring::iterator it hash.begin();while (it ! hash.end()){ret.push_back(it-second);it;}return ret;}
};