cpp
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char, int> us;
for(auto c: ransomNote){
us[c]++; // 将字符串存储
}
for(auto c: magazine){
if(us.count(c)){
us[c]--;
if(us[c] == 0) us.erase(c);
}
}
return us. Empty();
}
};
还是不会处理这里的去重逻辑
cpp
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
vector<vector<int>> ans;
auto n = nums.size();
for(auto i = 0; i < n - 2; i++){ // 边界注意是n-2
int left = i + 1, right = n -1;
if(i > 0 && nums[i-1] == nums[i]) continue;
while(left < right){
int target = nums[i] + nums[left] + nums[right];
if(target > 0){
right--;
}else if(target < 0){
left++;
} else{
vector<int> res = {nums[i], nums[left], nums[right]};
ans.push_back(res);
while(left < right && nums[left] == nums[left+1]) left++;
while(right > left && nums[right-1] == nums[right]) right--;
left++;
right--;
}
}
}
return ans;
}
};
cpp
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int, int> ump;
for(auto a: nums1){
for(auto b: nums2){
ump[a+b]++; // 统计可能出现的组数 , 次数
}
}
int ans = 0;
for(auto c : nums3){
for(auto d : nums4){
if(ump.count(-(c+d))){
ans += ump[-c -d];
}
}
}
return ans;
}
};
cpp
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> res;
int n = nums.size();
if(n < 4) return res;
sort(nums.begin(), nums.end());
for(int i = 0; i < n - 3; i++){
if(i > 0 && nums[i] == nums[i-1]) continue;
for(int j = i+1; j < n - 2; j++){
if(j > i + 1 && nums[j-1] == nums[j]) continue;
long long sum2 = nums[i] + nums[j];
// 双指针
int left = j + 1, right = n - 1;
while(left < right){
long long sum4 = sum2 + nums[left] + nums[right];
if(target > sum4){
left++;
}else if(target < sum4){
right--;
} else{ // 找到一个4元组合
res.push_back({nums[i], nums[j], nums[left],nums[right]});
while(left < right && nums[right-1] == nums[right]) right--;
while(left < right&& nums[left+1] == nums[left]) left++;
left++, right--;
}
}
}
}
return res;
}
};
总结:这次有的题目第二次写了还是不会,归根结底是对原理不清楚,只是在背题解一样,要多理解为什么这样写的原理。最难不过坚持!!!