第454题.四数相加II
#include<iostream>
#include<vector>
#include <unordered_map>
using namespace std;
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
int res = 0;
unordered_map<int, int> AB;
// 在AB中统计a和b的不同求和结果出现的次数
for (int& a : nums1)for (int& b : nums2) ++AB[a + b];
// 在AB中寻找-(c+d),并求和
for (int& c : nums3)for (int& d : nums4) res += AB[-c - d];
return res;
}
int main(){
vector<int> nums1,nums2,nums3,nums4;
int result,num;
while (cin >> num) {
nums1.push_back(num);
if (cin.get() == '\n')break;
}
while (cin >> num) {
nums2.push_back(num);
if (cin.get() == '\n')break;
}
while (cin >> num) {
nums3.push_back(num);
if (cin.get() == '\n')break;
}
while (cin >> num) {
nums4.push_back(num);
if (cin.get() == '\n')break;
}
result = fourSumCount(nums1, nums2, nums3, nums4);
cout << result;
}
383. 赎金信
用了之前有效字母异位词的方法,
统计magazine中各个字母的出现次数
遍历ransomNote中每个字母, 在统计数组中对应字母的次数减一,出现负数证明false,否则true
ACM模式
#include<iostream>
#include<vector>
#include <unordered_map>
using namespace std;
bool checkString(string ransomNode, string magazine) {
int res[26] = { 0 };
for(char ans:magazine){
res[ans - 'a']++;
}
for (char ans : ransomNode) {
res[ans - 'a']--;
if (res[ans - 'a'] < 0) {
return false;
}
}
return true;
}
int main(){
bool res;
string ransomNode, magazing;
cin >> ransomNode >> magazing;
res = checkString(ransomNode, magazing);
if(res) {
cout << "true"<<endl;
}
else {
cout << "false" << endl;
}
}