1. 有效的字母异位词 leetcode 242
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1: 输入: s = "anagram", t = "nagaram" 输出: true
示例 2: 输入: s = "rat", t = "car" 输出: false
说明: 你可以假设字符串只包含小写字母。
class Solution {
public:
bool isAnagram(string s, string t) {
int choose[26] = {0};
for ( int i = 0 ; i < s.size() ; i++) {
choose[s[i] - 'a'] += 1;
}
for ( int i = 0 ; i < t.size() ; i++) {
choose[t[i] - 'a'] -= 1;
}
for ( int i = 0 ; i < 26 ; i++) {
if (choose[i] != 0) {
return false;
}
}
return true;
}
};
第一次便利第一个数组 记录 出现 字母和个数
第二次便利 第二个 数组 ,删除 掉 之前出现的 字母
最后 看 数组是否 最后都为0 为0就是 同分异构
2.两个数组的交集 leetcode349
输出 两个 数组 相同 的元素
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> result;
unordered_set<int> num (nums1.begin() , nums1.end() );
for ( int a : nums2) {
if ( num.find(a) != num.end() ) {
result.insert(a);
}
}
return vector<int>(result.begin(),result.end());
}
};
由于 输出的 数组 不能 重复 所以 用可以 自动 过滤 重复元素 的 set
将第一个数组 记录到 set 中 ,再遍历第二个 数组 将 重复 元素 添加到 新的set 表中 作为 输出
3快乐数leetcode202
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。示例 1:
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
class Solution {
public:
int sum0(int n) {
int sum = 0;
while ( n ) {
sum += (n%10) * (n%10);
n = n/10;
}
return sum;
}
bool isHappy(int n) {
unordered_set <int> sum3;
int sum = 0;
while(n) {
sum = sum0(n);
if (sum == 1) return true;
if ( sum3.find(sum) != sum3.end()) return false;
else {
sum3.insert(sum);
}
n = sum;
}
return true;
}
};
采用 set 处理 无限循环 的情况 ,只要 sum 的结果 在 之前 出现过 就 返回 false
4.两数之和 leetcode 1
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int , int > map;
for ( int i = 0 ; i < nums.size() ; i++ ) {
auto s = map.find(target - nums[i]);
if ( s != map.end() ) {
return {s -> second , i};
}
else {
map.insert(pair<int,int>(nums[i] , i) );
}
}
return {};
}
};
可以 采用 双指针 对 数组 遍历两次
也可以采用 map 用数组值 为 哈希表的键 ,用 数组下标 为 哈希表的值,在 哈希表 中 查找
targe 与 num 的差 ,如果 有 就返回 俩下标 , 否则 就 将 num 与 下表 记录到 map 的 哈希表 中