哈希表2
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
unordered_map<int, int> sum;
for(auto a:nums1){
for(auto b:nums2){
sum[a+b]++;
}
}
int count = 0;
for(auto c:nums3){
for(auto d:nums4){
if(sum.find(0-(c+d))!=sum.end()){
count +=sum[0-(c+d)];
}
}
}
return count;
}
};
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
for(int i=0;i<magazine.length();i++){
for(int j=0;j<ransomNote.length();j++){
if(magazine[i]==ransomNote[j]){
ransomNote.erase(ransomNote.begin()+j);
break;
}
}
}
if(ransomNote.length()==0){
return true;
}else{
return false;
}
}
};
哈希表方法:
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int recorder[26] = {0};
if(ransomNote.length()>magazine.length()) return false;
for(int i =0;i<magazine.length();i++){
recorder[magazine[i]-'a']++;
}
for(int j=0;j<ransomNote.length();j++){
recorder[ransomNote[j]-'a']--;
if(recorder[ransomNote[j]-'a']<0) return false;
}
return true;
}
};
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> result;
sort(nums.begin(),nums.end());
for(int i=0;i<nums.size();i++){
if(nums[i]>0) return result;
if(i>0&&nums[i]==nums[i-1]) continue;
int left =i+1;
int right = nums.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[left]==nums[left+1]) left++;
while(right>left&&nums[right]==nums[right-1]) right--;
right--;
left++;
}
}
}
return result;
}
};
class Solution {
public:
vector<vector<int>> fourSum(vector<int>& nums, int target) {
vector<vector<int>> result;
sort(nums.begin(),nums.end());
for(int a=0;a<nums.size();a++){
if(nums[a]>target&&nums[a]>=0) return result;
if(a>0&&nums[a]==nums[a-1]) continue;
for(int b=a+1;b<nums.size();b++){
if(nums[a]+nums[b]>target&&nums[b]>=0) return result;
if(b>a+1&&nums[b]==nums[b-1]) continue;
int left = b+1;
int right = nums.size()-1;
while(right>left){
if((long)nums[a]+nums[b]+nums[left]+nums[right]>target) right--;
else if((long)nums[a]+nums[b]+nums[left]+nums[right]<target) left++;
else {
result.push_back(vector<int>{nums[a],nums[b],nums[left],nums[right]});
left++;
right--;
}
}
}
}
return result;
}
};
注意,result的定义其实不是太懂(其实类已经定义vector格式,不必纠结选用什么vector)