454.四数相加II
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int,int> mp;
int n = nums1.size();
int ans=0;
for(int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
mp[nums1[i] + nums2[j]]++;
}
}
for(int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
ans += mp[0 - (nums3[i] + nums4[j])];
}
}
return ans;
}
};
时间复杂度:O(n2) 空间复杂度: O(n2)
383 赎金信
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
unordered_map<char,int> mp;
for(char a:magazine) {
mp[a]++;
}
for(char a:ransomNote) {
if(--mp[a] < 0) {
return false;
}
}
return true;
}
};
15. 三数之和
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ans;
sort(nums.begin(), nums.end());
int n = nums.size();
int l = 0;
int r = 0;
for (int i = 0; i < n - 2; i++) {
if (nums[i] > 0) {
return ans;
}
// 去重
if (i > 0 && nums[i] == nums[i - 1]) {
continue;
}
int a = nums[i];
l = i + 1;
r = n - 1;
while (l<r) {
if (nums[l] + nums[r] + a > 0) {
r--;
} else if (nums[l] + nums[r] + a < 0) {
l++;
} else {
ans.push_back({nums[l++],nums[r--],a});
cout << i << l - 1 << r + 1<<endl;
while(nums[l]==nums[l-1] && l < r) {
l++;
}
while(nums[r]==nums[r + 1] && l < r) {
r--;
}
}
}
}
return ans;
}
};