day7:
454 4SUM:
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int,int>mp;
int result = 0;
for(int i = 0; i < nums1.size(); i++){
for(int j = 0;j<nums2.size();j++){
mp[nums1[i]+nums2[j]]++;
}
}
for(int i = 0; i < nums3.size(); i++){
for(int j = 0;j<nums4.size();j++){
if(mp.find(0-nums3[i]-nums4[j]) != mp.end()){
result += mp[0-nums3[i]-nums4[j]];
}
}
}
return result;
}
};
383 Ransom Note:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int uset[26] = {0};
for (int i=0;i<ransomNote.size();i++){
uset[ransomNote[i]-'a']++;
}
for (int i=0;i<magazine.size();i++){
uset[magazine[i]-'a']--;
}
for(int i=0;i<26;i++){
if(uset[i]>0){
return false;
}
}
return true;
}
};
15 3Sum:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int size = nums.size();
vector<vector<int>> result;
sort(nums.begin(),nums.end());
for(int i=0;i<size;i++){
if(nums[i]>0)
return result;
if(i>=1 && nums[i] == nums[i-1])
continue;
int left = i+1;
int right = size-1;
while(right>left){
if(nums[i]+nums[left]+nums[right] > 0){
right--;
}
else if(nums[i]+nums[left]+nums[right] < 0){
left++;
}
else{
result.push_back(vector<int>{nums[i],nums[left],nums[right]});
while(right > left && nums[right] == nums[right-1]){
right--;
}
while(right > left && nums[left] == nums[left+1]){
left++;
}
right--;
left++;
}
}
}
return result;
}
};
18 4Sum:
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
int size = nums.size();
sort(nums.begin(),nums.end());
vector<vector<int>> result;
for(int i=0;i<size;i++){
if(nums[i]>target && nums[i] >0)
break;
if(i>=1 && nums[i] == nums[i-1]){
continue;
}
for(int j=i+1;j<size;j++){
if(nums[i]+nums[j]>target && nums[i]+nums[j] >0)
break;
if(j>=i+2 && nums[j] == nums[j-1]){
continue;
}
int left = j+1;
int right = size-1;
while(right>left){
if((long)nums[i]+nums[j]+nums[left]+nums[right] > target){
right--;
}
else if((long)nums[i]+nums[j]+nums[left]+nums[right] < target){
left++;
}
else{
result.push_back(vector<int>{nums[i],nums[j],nums[left],nums[right]});
while(right > left && nums[right] == nums[right-1]){
right--;
}
while(right > left && nums[left] == nums[left+1]){
left++;
}
right--;
left++;
}
}
}
}
return result;
}
};