代码随想录算法训练营第36期DAY7

昨天做市调赛PPT,今天起晚了,中午14.30才开始训练。总之有收获就是最好的。

DAY7

454四数相加

Map怎么用?朴素法也设计不出来。看了题解之后,自己写了一遍,通过了,等待二刷。

  1. class Solution {
  2. public:
  3.     int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {
  4.         unordered_map<int,int> m;
  5.         int cnt=0;
  6.         for(int i=0;i<nums1.size();i++)
  7.         {
  8.             for(int j=0;j<nums2.size();j++)
  9.             m[nums1[i]+nums2[j]]++;
  10.         }
  11.         
  12.         for(int i=0;i<nums3.size();i++)
  13.         {
  14.             for(int j=0;j<nums4.size();j++)
  15.             if(m.find(0-(nums3[i]+nums4[j]))!=m.end()) cnt+=m[0-(nums3[i]+nums4[j])];
  16.         }
  17.         return cnt;
  18.     }
  19. };

383赎金信

  1. class Solution {
  2. public:
  3.     bool canConstruct(string ransomNote, string magazine) {
  4.         int r[26]={0},m[26]={0};
  5.         for(char c:ransomNote) r[c-'a']++;
  6.         for(char c:magazine) m[c-'a']++;
  7.         for(int i=0;i<26;i++)
  8.         {
  9.             if(r[i]==0continue;
  10.             if(r[i]>m[i]) return false;
  11.         }
  12.         return true;
  13.     }
  14. };

15三数之和

不会,还得学呀。待二刷。

  1. class Solution {
  2. public:
  3.     vector<vector<int>> threeSum(vector<int>& nums) {
  4.         //该怎么初始化符合题意的res二维vector?怎么写psuh_back?
  5.         vector<vector<int>> res;
  6.         sort(nums.begin(),nums.end());
  7.         for(int i=0;i<nums.size();i++)
  8.         {
  9.             if(nums[i]>0) {return res;}
  10.             if(i>0&&nums[i]==nums[i-1]) {continue;}
  11.             int l=i+1,r=nums.size()-1;
  12.             while(l<r)
  13.             {
  14.                 if(nums[i]+nums[l]+nums[r]>0) r--;
  15.                 else if(nums[i]+nums[l]+nums[r]<0) l++;
  16.                 else
  17.                 {
  18.                     res.push_back(vector<int>{nums[i],nums[l],nums[r]});
  19.                     while(r>l&&nums[l]==nums[l+1]) l++;
  20.                     while(r>l&&nums[r]==nums[r-1]) r--;
  21.                     r--;
  22.                     l++;
  23.                 }
  24.             }
  25.         }
  26.         return res;
  27.     }
  28. };

18四数之和

多学。看了代码随想录的解析。注意减枝和去重别写错。等待二刷

  1. class Solution {
  2. public:
  3.     vector<vector<int>> fourSum(vector<int>& nums, int target) {
  4.     vector<vector<int>> res;
  5.     sort(nums.begin(),nums.end());
  6.     for(int i=0;i<nums.size();i++)
  7.     {
  8.         //剪枝
  9.         if(nums[i]>target&&nums[i]>=0break;
  10.         //去重
  11.         if(i>0&&nums[i]==nums[i-1]) continue;
  12.         for(int k=i+1;k<nums.size();k++)
  13.         {
  14.             //剪枝
  15.             if((nums[k]+nums[i])>target&&(nums[i]+nums[k])>=0break;
  16.             //去重
  17.             if(k>(i+1)&&nums[k]==nums[k-1]) continue;
  18.             int l=k+1;
  19.             int r=nums.size()-1;
  20.             while(l<r)
  21.             {
  22.                 if((long)nums[k]+nums[i]+nums[l]+nums[r]>target) r--;
  23.                 else if((long)nums[k]+nums[i]+nums[l]+nums[r]<target) l++;
  24.                 else{
  25.                     res.push_back({nums[k],nums[i],nums[l],nums[r]});
  26.                     while(l<r&&nums[r]==nums[r-1]) r--;
  27.                     while(l<r&&nums[l]==nums[l+1]) l++;
  28.                     l++;
  29.                     r--;
  30.                 }
  31.             }
  32.         }
  33.     }
  34.     return res;
  35.     }
  36. };
代码随想录算法训练营是一个优质的学习和讨论平台,提供了丰富的算法训练内容和讨论交流机会。在训练营中,学员们可以通过观看视频讲解来学习算法知识,并根据讲解内容进行刷题练习。此外,训练营还提供了刷题建议,例如先看视频、了解自己所使用的编程语言、使用日志等方法来提高刷题效果和语言掌握程度。 训练营中的讨论内容非常丰富,涵盖了各种算法知识点和解题方法。例如,在第14天的训练营中,讲解了二叉树的理论基础、递归遍历、迭代遍历和统一遍历的内容。此外,在讨论中还分享了相关的博客文章和配图,帮助学员更好地理解和掌握二叉树的遍历方法。 训练营还提供了每日的讨论知识点,例如在第15天的讨论中,介绍了层序遍历的方法和使用队列来模拟一层一层遍历的效果。在第16天的讨论中,重点讨论了如何进行调试(debug)的方法,认为掌握调试技巧可以帮助学员更好地解决问题和写出正确的算法代码。 总之,代码随想录算法训练营是一个提供优质学习和讨论环境的平台,可以帮助学员系统地学习算法知识,并提供了丰富的讨论内容和刷题建议来提高算法编程能力。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [代码随想录算法训练营每日精华](https://blog.csdn.net/weixin_38556197/article/details/128462133)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值