383. 赎金信 - 力扣(LeetCode)
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();}
};
15. 三数之和 - 力扣(LeetCode)
还是不会处理这里的去重逻辑
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-2int 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;}
};
454. 四数相加 II - 力扣(LeetCode)
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;}
};
18. 四数之和 - 力扣(LeetCode)
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;}
};
总结:这次有的题目第二次写了还是不会,归根结底是对原理不清楚,只是在背题解一样,要多理解为什么这样写的原理。最难不过坚持!!!