代码拉取完成,页面将自动刷新
//https://leetcode.cn/problems/two-sum/
//俩数之和
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 num = target - nums[i];
if(hash.count(num))
{
return {hash[num],i};
}
hash[nums[i]] = i;
}
return {};
}
};
解题思路:把一个数之前的数入hash表,遍历的时候,依次查找。
////////////////////////////////////////////////////////////////////////////////////////////////
//https://leetcode.cn/problems/check-permutation-lcci/
//判定是否互为字符重排
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
unordered_map<int,int> hash;
for(int i = 0; i < s1.size(); ++i)
hash[s1[i]]++;
for(int i = 0; i < s2.size(); ++i)
hash[s2[i]]--;
for(auto e : hash)
if(e.second)
return false;
return true;
}
};
解题思路:
用hash表统计其中一个字符串中每一个字符出现的次数,遍历另一个字符串,将hash表中对应的位置 减减;如果两个字符串中的每个字符的个数相同,hash表中的val都为0;
////////////////////////////////////////////////////////////////////////////////////////////////
//https://leetcode.cn/problems/contains-duplicate/
//存在重复元素
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
unordered_set<int> hash;
for(int i = 0; i < nums.size(); ++i)
{
if(hash.count(nums[i]))
return true;
hash.insert(nums[i]);
}
return false;
}
};
解题思路:
先判断是否存在,不存在就将当前数据放入hash表中,存在就返回true;
////////////////////////////////////////////////////////////////////////////////////////////////
//https://leetcode.cn/problems/contains-duplicate-ii/
//存在重复元素2
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(abs(hash[nums[i]]-i) <= k)
return true;
}
hash[nums[i]] = i;
}
return false;
}
};
解题思路:
判断当前值是否存在,不存在则插入,其实无论如何都会插入,当已经存在但是不符合规则时,插入的值会覆盖之前的值,继续寻找合法的值。
////////////////////////////////////////////////////////////////////////////////////////////////
//https://leetcode.cn/problems/sfvd7V/
//字母异位词分组
class Solution {
public:
vector<vector<string>> groupAnagrams(vector<string>& strs) {
unordered_map<string,vector<string>> hash;
for(int i = 0; i < strs.size(); ++i)
{
string tmp = strs[i];
sort(tmp.begin(), tmp.end());
hash[tmp].push_back(strs[i]);
}
vector<vector<string>> ret;
for(auto e : hash)
{
ret.push_back(e.second);
}
return ret;
}
};
解题思路:
构建<string, vector<string>> 类型的键值对,遍历字符数组strs,将strs中的字符串的替身排序,将原始字符串尾插到对应的vector<string> 中。用hash表中的vector<string> 构建需要返回的值。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。