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;}
};
總結:這次有的題目第二次寫了還是不會,歸根結底是對原理不清楚,只是在背題解一樣,要多理解為什么這樣寫的原理。最難不過堅持!!!