● 242.有效的字母异位词
采用哈希数组
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26]={0};
for(int i=0;i<s.size();i++){
record[s[i]-'a']++;
}
for(int i=0;i<t.size();i++){
record[t[i]-'a']--;
}
for(int i=0;i<26;i++){
if(record[i]!=0){
return false;
}
}
return true;
}
};
● 349. 两个数组的交集
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result_set;//创建哈希表
unordered_set<int> nums_set(nums1.begin(),nums1.end());//
for(int num:nums2){
if(nums_set.find(num)!=nums_set.end()){
result_set.insert(num);
}
}
return vector<int>(result_set.begin(),result_set.end());
}
};
● 202. 快乐数
class Solution {
public:
int getsum(int n){//定义一个求快乐数的函数
int sum=0;
while(n){//输入数字n
sum+=(n%10)*(n%10);//
n/=10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> set;//定义一个哈希表set,用于存储计算结果
while(1){进入循环,直到返回结果
int sum=getsum(n);
if(sum==1){//说明是我们要找的快乐数
return true;
}
if(set.find(sum)!=set.end()){//返回值陷入循环
return false;
}
else{
set.insert(sum);//为陷入循环,插入到set表中
}
n=sum;
}
}
};```
● 1. 两数之和
```cpp
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {//这是一个名为 twoSum 的函数,它接受一个整数向量 nums 和一个目标整数 target 作为参数,并且返回一个整数向量。这个函数用于解决 "Two Sum" 问题。
std::unordered_map<int,int> map;//创建一个无序哈希表,用于存储已经遍历过的数字及其索引。这里使用了 C++ 标准库的 std::unordered_map 类来实现。
for(int i=0;i<nums.size();i++){//
auto iter=map.find(target-nums[i]);//在无序哈希表中查找是否存在键为 complement 的元素,如果找到了,返回对应的迭代器;否则返回哈希表的 end 迭代器。
if(iter!=map.end()){//如果在哈希表中找到了与当前差值匹配的元素。
return {iter->second,i};// 返回一个向量,包含找到的两个数的索引。iter->first是指键值对中的键;iter->second 是指键值对应的索引,i 是当前遍历的元素的索引。
}
map.insert(pair<int,int>(nums[i],i));// 将当前遍历的数字及其索引插入无序哈希表中,以便后续可以通过差值来查找。
}
return {};//若未找到符合条件的组合,返回一个空向量。
}
};