本文主要是介绍代码随想录算法训练营第7天| 454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
454. 四数相加 II
题目链接
454. 四数相加 II - 力扣(LeetCode)
思路
这道题目的暴力解法是O(n^4),可以与两数之和一样使用哈希法解决,但是必要两个嵌套for循环了!
这道题可以采用的哈希结构为map类型的,key值作元素值,value值作为同一个key值出现的次数
本人题解
class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {//2024.2.27二刷//这道题目的暴力解法是O(n^4),可以与两数之和一样使用哈希法解决,但是必要两个for循环了!//这道题可以采用的哈希结构为map类型的,key值作元素值,value值作为同一个key值出现的次数//因此用的是unordered_mapunordered_map<int, int> mymap;//首先遍历前两个数组for (int i = 0; i < nums1.size(); i++) {for (int j = 0; j < nums2.size(); j++) {mymap[-nums1[i] - nums2[j]]++;//这个存数据的方式太巧妙了!}}int count = 0;//统计个数for (int i = 0; i < nums3.size(); i++) {for (int j = 0; j < nums4.size(); j++) {if (mymap.find(nums3[i] + nums4[j]) != mymap.end()) {count += mymap[nums3[i] + nums4[j]];}}}return count;}
};
383. 赎金信
题目链接
383. 赎金信 - 力扣(LeetCode)
思路
这道题有哈希法的影子!与字母异位那题很像。由题知不可重复,采用数组
本人题解
class Solution {
public:bool canConstruct(string ransomNote, string magazine) {//这道题有哈希法的影子!与字母异位那题很像。由题知不可重复,//采用数组int record[26] = {0};//初始化为0for (int i = 0; i < ransomNote.size(); i++) {record[ransomNote[i] - 'a']++;}for (int j = 0; j < magazine.size(); j++) {record[magazine[j] - 'a']--;}for (int k = 0; k < 26; k++) {if (record[k] > 0) return false;}return true;}
};
15. 三数之和
题目链接
15. 三数之和 - 力扣(LeetCode)
思路
想到了哈希法,但是不太会做。
本人题解
无
18. 四数之和
题目链接
18. 四数之和 - 力扣(LeetCode)
思路
同三数之和
本人题解
无
这篇关于代码随想录算法训练营第7天| 454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!