代码随想录打卡第五天, 新手自我记录一下刷题历程, 仅为自我打卡使用.
周一生病了, 周二补的记录, 简单记录一下
哈希法, 建立一个数组, 把字母映射到数组不同的下标
class Solution {
public:
bool isAnagram(string s, string t) {
// vector<int> record(26, 0);
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 (auto r: record){
if (r != 0 ){
return false;
}
}
return true;
}
};
哈希法, 利用set可以去重的优点.
这题和后面的几题更像是考察对set或者map这些数据结构的掌握
class Solution {
public:
vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {
unordered_set<int> nums1_set(nums1.begin(), nums1.end());
unordered_set<int> result_set;
for (auto s: nums2){
if (nums1_set.find(s) != nums1_set.end()){
result_set.emplace(s);
}
}
vector<int> result(result_set.begin(), result_set.end());
return result;
}
};
按位提取数字要小心
class Solution {
public:
bool isHappy(int n) {
unordered_set<int> result;
int sum = 0;
while(1){
while (n != 0){
sum += (n % 10) * (n % 10);
n /= 10;
}
if(sum == 1)
break;
if(result.find(sum) == result.end()){
result.emplace(sum);
n = sum;
sum = 0;
}
else{
return false;
}
}
return true;
}
};
要同时保存值和对应的下标, 考虑map
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> nums_map;
for (int i = 0; i < nums.size(); ++i){
auto iter = nums_map.find(target - nums[i]);
if (iter == nums_map.end()){
nums_map.emplace(pair<int, int>(nums[i], i));
}
else{
return vector<int>{iter->second, i};
}
}
return {};
}
};
哈希的part1完成!