LeetCode题目链接
https://leetcode.cn/problems/valid-anagram/
https://leetcode.cn/problems/intersection-of-two-arrays/
https://leetcode.cn/problems/happy-number/
https://leetcode.cn/problems/two-sum/
题解
242.有效的字母异位词
这道题要想到用哈希表来做。同时注意最后的返回值经AI呈现可以直接返回为hash1==hash2,不失为一个新举措。
349.两个数组的交集
分两个哈希表即可。
202.快乐数
乍一看题目,不太会写。怎么样返回无限循环的false。
好吧,AI提示当n==4的时候就返回false,我不知道这是什么原因,看了题解再说吧,即看卡哥视频。
代码是写出来了,但不完全是自己写的,尤其是取个位数的循环条件和处理逻辑。
题解一定要看,代码很简洁,注意用到的数据结构和各个返回逻辑。
1.两数之和
想用双指针的写法,但发现题目不能让数组排序,要按照原顺序。
试了下两个for循环暴力解法就过了。再去看题解,应该有更合理的解法。
代码
cpp
//242.有效的字母异位词
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Solution {
public:
bool isAnagram(string s, string t) {
vector<int> hash1(26, 0), hash2(26, 0);
for (int i = 0;i < s.size();i++) {
hash1[s[i] - 'a']++;
}
for (int i = 0;i < t.size();i++) {
hash2[t[i] - 'a']++;
}
return hash1 == hash2;
}
};
int main() {
string str = "rat", t = "car";
Solution s;
printf("%d", s.isAnagram(str, t));
return 0;
}
cpp
//349.两个数组的交集
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
vector<int> hash1(1010, 0),hash2(1010,0), result;
for (int i = 0;i < nums1.size();i++) {
hash1[nums1[i]]++;
}
for (int i = 0;i < nums2.size();i++) {
hash2[nums2[i]]++;
}
for (int i = 0;i < hash1.size();i++) {
if (hash1[i] > 0 && hash2[i] > 0) result.push_back(i);
}
return result;
}
};
int main() {
Solution s;
vector<int> nums1 = { 4,9,5 }, nums2 = { 9,4,9,8,4 };
vector<int> result = s.intersection(nums1, nums2);
for (int i = 0;i < result.size();i++) {
printf("%d ", result[i]);
}
return 0;
}
cpp
//202.快乐数
#include <iostream>
using namespace std;
class Solution {
public:
bool isHappy(int n) {
while (n != 1) {
int sum = 0;
while (n) {
int digit = n % 10;
sum += digit * digit;
n /= 10;
}
n = sum;
if (n == 4) {
return false;
}
}
return true;
}
};
int main() {
Solution s;
int n = 2;
printf("%d", s.isHappy(n));
return 0;
}
cpp
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for(int i = 0; i < nums.size();i++){
for(int j = i + 1;j < nums.size();j++){
if(nums[i] + nums[j] == target) return {i, j};
}
}
return {0, 0};
}
};