学习资料
programmercarl.com/0454.%E5%9B…
454.四数相加II
第一思路
遍历前三个数组里得元素得和,然后在第四个数组里找是否存在相反数.
class Solution {
public:
int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
//
int count = 0;
unordered_map<int,int> umap;
for (int i = 0; i < nums4.size(); i++) {
umap.emplace(pair<int,int>(nums4[i],i));
}
for (int i = 0; i < nums1.size(); i++) {
for ( int j = 0; j < nums2.size();j++) {
for (int k = 0; k < nums3.size(); k++) {
int sum = nums1[i] + nums2[j] + nums3[k];
if (umap.find(-sum) != umap.end())
count++;
}
}
}
return count;
}
};
结果报错了
383 赎金信
第一思路
将magazine 映射到hash数组26,存储每个单词得次数, 遍历ransomNote,每使用一个,hash数组里的次数减1, 最后看hash数组里是否有元素小于0.
class Solution {
public:
bool canConstruct(string ransomNote, string magazine) {
int hash[26] = {0};
for (char s: magazine) {
hash[s - 'a']++;
}
for (char s : ransomNote) {
hash[s - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (hash[i] < 0)
return false;
}
return true;
}
};
结果一次AC
总结
虽然ac了,但是忘记了一个条件(虽然这个条件没啥必要),就是a串的长度要小于等于b串,然后第三个for实际上是可以写在第二个里面的.
15. 三数之和
第一思路
暴力解法先搞一哈
总结
还是想不到
18
第一思路
无