当前位置:   article > 正文

代码随想录算法训练营第7天| 454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和

代码随想录算法训练营第7天| 454. 四数相加 II、383. 赎金信、15. 三数之和、18. 四数之和

454. 四数相加 II

题目链接

454. 四数相加 II - 力扣(LeetCode)

思路

这道题目的暴力解法是O(n^4),可以与两数之和一样使用哈希法解决,但是必要两个嵌套for循环了!

这道题可以采用的哈希结构为map类型的,key值作元素值,value值作为同一个key值出现的次数

本人题解

  1. class Solution {
  2. public:
  3. int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
  4. //2024.2.27二刷
  5. //这道题目的暴力解法是O(n^4),可以与两数之和一样使用哈希法解决,但是必要两个for循环了!
  6. //这道题可以采用的哈希结构为map类型的,key值作元素值,value值作为同一个key值出现的次数
  7. //因此用的是unordered_map
  8. unordered_map<int, int> mymap;
  9. //首先遍历前两个数组
  10. for (int i = 0; i < nums1.size(); i++) {
  11. for (int j = 0; j < nums2.size(); j++) {
  12. mymap[-nums1[i] - nums2[j]]++;//这个存数据的方式太巧妙了!
  13. }
  14. }
  15. int count = 0;//统计个数
  16. for (int i = 0; i < nums3.size(); i++) {
  17. for (int j = 0; j < nums4.size(); j++) {
  18. if (mymap.find(nums3[i] + nums4[j]) != mymap.end()) {
  19. count += mymap[nums3[i] + nums4[j]];
  20. }
  21. }
  22. }
  23. return count;
  24. }
  25. };

383. 赎金信

题目链接

383. 赎金信 - 力扣(LeetCode)

思路

这道题有哈希法的影子!与字母异位那题很像。由题知不可重复,采用数组

本人题解

  1. class Solution {
  2. public:
  3. bool canConstruct(string ransomNote, string magazine) {
  4. //这道题有哈希法的影子!与字母异位那题很像。由题知不可重复,
  5. //采用数组
  6. int record[26] = {0};//初始化为0
  7. for (int i = 0; i < ransomNote.size(); i++) {
  8. record[ransomNote[i] - 'a']++;
  9. }
  10. for (int j = 0; j < magazine.size(); j++) {
  11. record[magazine[j] - 'a']--;
  12. }
  13. for (int k = 0; k < 26; k++) {
  14. if (record[k] > 0) return false;
  15. }
  16. return true;
  17. }
  18. };

15. 三数之和

题目链接

15. 三数之和 - 力扣(LeetCode)

思路

想到了哈希法,但是不太会做。

本人题解

18. 四数之和

题目链接

18. 四数之和 - 力扣(LeetCode)

思路

同三数之和

本人题解

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/165264
推荐阅读
相关标签
  

闽ICP备14008679号