力扣题目链接
题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
示例 1: 输入: s = “anagram”, t = “nagaram” 输出: true
示例 2: 输入: s = “rat”, t = “car” 输出: false
说明: 你可以假设字符串只包含小写字母。
思路:
该题其实是判断两个字符串的各个字母数目是否相同,很容易想到分别统计两个字符串的字母数目进行比较。
那么,我们可以利用数组下标标识26个英文字母,然后存储每个字母的次数,首先遍历s,统计出每个字母的次数,然后遍历t,在数组中依次减去对应字母出现的次数,这样最后得到的数组如果每项都为0,即为所求结果。
代码实现:
bool isAnagram(string s, string t) {
vector<int> record(26, 0);
for(auto& s_word : s) {
record[s_word - 'a']++;
}
for (auto& t_word : t) {
record[t_word - 'a']--;
}
for (int& word : record) {
if(word != 0) {
return false;
}
}
return true;
}
力扣题目链接
题目描述:
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
示例 1:
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
思路:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> record1(nums1.begin(),nums1.end());
unordered_set<int> results_set;
vector<int> results;
for (int& i : nums2) {
if(record1.count(i)) {
results_set.insert(i);
}
}
return vector<int>(results_set.begin(), results_set.end());
}
力扣题目链接
题目描述:
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
思路:
代码实现:
int getSum(int n) {
int sum = 0;
while(n) {
sum += (n % 10) * (n % 10);
n /= 10;
}
return sum;
}
bool isHappy(int n) {
unordered_set<int> sum_set;
int sum = n;
while(1) {
sum = getSum(sum);
cout << sum << endl;
if(sum == 1) {
return true;
}
if (sum_set.count(sum)) {
return false;
}
sum_set.insert(sum);
}
}
力扣题目链接
题目描述:
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
思路:
由于一个元素不能重复出现,我们可以直接遍历元素,然后在哈希表中寻找,是否存在(target-当前值)这个数字,存在就直接返回,不存在可以把当前元素添加到哈希表中,因为题目要求返回下标,那么我们可以使用map的value来记录下标值。
代码实现:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> record;
for (int i = 0; i < nums.size(); ++i) {
auto iter = record.find(target - nums[i]);
if (iter != record.end()) {
return {iter->second, i};
}
record.insert(pair<int, int>(nums[i], i));
}
return {};
}
总结: