代码随想录算法训练营第七天

● 自己看到题目的第一想法

第454题.四数相加II

  1. 方法:
    方法一: 暴力法 思路:

  2. 注意:

  3. 代码:

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {int res = 0;for(int i=0;i<nums1.size();i++){for(int j = 0; j<nums2.size();j++){for(int m = 0; m<nums3.size();m++ ){for(int n = 0; n<nums4.size(); n++){if(nums1[i]+nums2[j]+nums3[m]+nums4[n] == 0){res++ ;}}}}}return res;}
};
  1. 运行结果:
    在这里插入图片描述

  2. 方法:
    方法二: 哈希 思路:

    1. 定义unprdered_map<int, int>map;  //key指两数之和,  value指两数之和出现的次数
    2. 将nums1与nums2之和放入map中;
    3. 求nums3与nums4之和,
    4. 在map中查找 -(nums3+nums4),若能找到则输出res+=map[-(nums3+nums4)]
    5. 最终返回 res;
    
  3. 注意:

  4. 代码:

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> map;  // 两数之和, 两数出现的次数for(int i=0; i<nums1.size(); i++){for(int j = 0; j<nums2.size();j++){map[nums1[i]+nums2[j] ]++;}}int res= 0;for(int k = 0; k<nums3.size(); k++){for(int l = 0; l< nums4.size(); l++){if(map.find(-(nums3[k]+nums4[l])) !=map.end()){res += map[-(nums3[k]+nums4[l])];// cout<<res<<endl;}}}return res;}
};

在这里插入图片描述

383. 赎金信

  1. 方法: 哈希 思路:

    1. 定义一个数组大小为26,初始值为0;
    2. 遍历magazine  将每个字符放入  数组中;
    3. 遍历ransomNote   在其中查找 是否有magazine  中的字符
    4. 如果发现 ransomNote中存在某个英文字母   的统计次数大于 magazine 中该字母统计次数,则此时我们直接返回 false。
    
  2. 注意:

  3. 代码:

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {vector<int>record(26,0);for(auto& i: magazine){record[i-'a']++;}for(char i =0; i<ransomNote.size(); i++){record[ransomNote[i]-'a']--;if(record[ransomNote[i]- 'a'] < 0){return false;}}return true;}
};

在这里插入图片描述

15. 三数之和

去重的代码:暴力法:


class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>>res;for(int i=0;i<nums.size(); i++){for(int j=i+1; j<nums.size(); j++){for(int k=j+1; k<nums.size(); k++){if(nums[i]+nums[j]+nums[k]==0){vector<int>n ={nums[i], nums[j], nums[k]};res.push_back(n);}}}}return res;}
};

在这里插入图片描述

  1. 方法: 排序+双指针:

在这里插入图片描述

  1. 注意:

     1. 找到三数之和为0,必须先对left  与right去重后  left 与right 再分别向前  与后移动2. 需要分别对  i, left, right  去重
    
  2. 代码:

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>>res;sort(nums.begin(), nums.end());for(int i=0; i<nums.size(); i++){if(i>0 && nums[i]==nums[i-1]){continue;}// if (nums[i] > 0) {//     return res;// }int left= i+1;int right =nums.size()-1;while(left<right){if(nums[left]+nums[right]+nums[i]<0){left++;}else if(nums[left]+nums[right]+nums[i]>0){right--;}else{res.push_back(vector<int>{nums[i], nums[left], nums[right]});// left++;// right--;while(left<right && nums[left]== nums[left+1]){left++;}while(left<right && nums[right] == nums[right-1]){right--;}left++;right--;}}}return res;}
};

在这里插入图片描述

18. 四数之和

  1. 方法: 排序+双指针:

  2. 注意: 一定要加(long),否则会溢出

  3. 代码:

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>>res;sort(nums.begin(), nums.end());for(int i=0;i<nums.size(); i++){if(nums[i]>target && nums[i]>=0){break;}  //一级剪枝if(i>0 && nums[i]== nums[i-1]){continue; } //去重for(int j=i+1; j<nums.size(); j++){if(nums[i]+nums[j]>target && nums[i]+nums[j]>=0){break;} //二级剪枝if(j>i+1 && nums[j]==nums[j-1]){continue;}  //去重int left= j+1;int right = nums.size()-1;while(left<right){if((long)nums[left]+nums[right]+nums[i]+nums[j]<target){left++;}else if((long)nums[left]+nums[right]+nums[i]+nums[j]>target){right--;}else{res.push_back(vector<int>{nums[i], nums[j], nums[left], nums[right]});while(left<right && nums[left] == nums[left+1]){left++;}while(left<right && nums[right] == nums[right-1]){right--;}left++;right--;}}}}return res;}
};

在这里插入图片描述

没有加(long)的结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716599.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QT 网络编程 8

1 基础知识 udp tcp 2 UDP 框架 客户端: QUdpSocket x; qint64 writeDatagram( const char *data, qint64 size, const QHostAddress &address, quint16 port );服务器: void Server::initSocket(){udpSocket new QUdpSocket(this);udpSocket->bind(QHostAddress…

macos jupyter notebook字体的修改

终端codemirror 记事本打开 搜索font-family 修改font-size保存即可

重学SpringBoot3-@ConditionalOnXxx条件注解

重学SpringBoot3-ConditionalOnXxx条件注解 引言常见的条件注解常见的条件注解示例扩展条件注解1. ConditionalOnJndi2. ConditionalOnJava3. ConditionalOnCloudPlatform4. ConditionalOnEnabledResourceChain5. 自定义条件注解 总结 引言 Spring Boot 提供了一组强大的条件注…

ERDAS监督分类与温度反演教程

本期带来监督分类教程&#xff0c;更多内容&#xff0c;欢迎关注小编的公众号梧桐凉月哦&#xff01;&#xff01;&#xff01; 一、研究区自然、地理环境特征&#xff1a; 1、景德镇市位于中国江西省东北部&#xff0c;地处赣江中游的赣北盆地&#xff0c;地形地貌以丘陵和低…

mitmproxy代理

文章目录 mitmproxy1. 网络代理2. 安装3. Https请求3.1 启动mitmproxy3.2 获取证书3.3 配置代理3.4 运行测试 4. 请求4.1 读取请求4.2 修改请求4.3 拦截请求 5. 响应5.1 读取响应5.2 修改响应 6. 案例&#xff1a;共享账号6.1 登录bilibili获取cookies6.2 在代理请求中设置cook…

ER-NeRF实时对话数字人模型训练与部署

ER-NeRF是基于NeRF用于生成数字人的方法&#xff0c;可以达到实时生成的效果。 下载源码 cd D:\Projects\ git clone https://github.com/Fictionarry/ER-NeRF cd D:\Projects\ER-NeRF 下载模型 准备面部解析模型 wget https://github.com/YudongGuo/AD-NeRF/blob/master/…

MyBatisPlus入门教程

MyBatisPlus MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window) 的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生。 官网地址&#xff1a;https://baomidou.com/ 一、入门案…

sql注入之sqli-labs-less-1 错误注入

输入?id1 得到登录页面&#xff1a; 通过order by 函数试探&#xff1a; 5的时候报错 试探到3 的时候返回正确的值&#xff1a; 然后继续注入&#xff1a;?id -1 union select 1,2,3 -- 查看回显点&#xff1a; 开始查看数据库内容&#xff1a;id-1 union select 1,databa…

open-spider开源爬虫工具:抖音数据采集

在当今信息爆炸的时代&#xff0c;网络爬虫作为一种自动化的数据收集工具&#xff0c;其重要性不言而喻。它能够帮助我们从互联网上高效地提取和处理数据&#xff0c;为数据分析、市场研究、内容监控等领域提供支持。抖音作为一个全球性的短视频平台&#xff0c;拥有海量的用户…

CKA考生注意:这些Deployment要点能助你一臂之力!

往期精彩文章 : 提升CKA考试胜算&#xff1a;一文带你全面了解RBAC权限控制&#xff01;揭秘高效运维&#xff1a;如何用kubectl top命令实时监控K8s资源使用情况&#xff1f;CKA认证必备&#xff1a;掌握k8s网络策略的关键要点提高CKA认证成功率&#xff0c;CKA真题中的节点维…

68-解构赋值,迭代器,生成器函数

1.解构赋值(针对数组array&#xff0c;字符串String及对象object以) 结构赋值是一种特殊的语法&#xff0c;通过将各种结构中的元素复制到变量中达到"解构"的目的&#xff0c;但是数组本身没有改变 1.1解构单层数组 <script>let arr [1,2,3,4,5];//获取数组…

c++ primer学习笔记(一)

目录 第一章、c快速入门 重点&#xff1a;类的简介 第二章 1、基本内置类型 2、字面值常量 1、整型字面值规则 2、浮点字面值规则 3、布尔字面值 4、字符字面值 5、非打印字符的转义序列 ​编辑 6、字符串字面值 3、变量 1、变量标识符 2、定义和初始化对象 3、…

java: 无法访问org.springframework.web.bind.annotation.RequestMapping......类文件具有错误的版本 61.0, 应为 52.0

文章目录 一、报错问题二、问题背景三、原因分析四、解决方案 一、报错问题 java: 无法访问org.springframework.web.bind.annotation.RequestMapping 错误的类文件: /D:/SoftwareInstall/Maven/repository/org/springframework/spring-web/6.0.9/spring-web-6.0.9.jar!/org/s…

latex报错Repeated entry解决办法

报错原因——重复了两个参考文献&#xff0c;删掉一个即可 总结 "Repeated entry"这个错误通常出现在你尝试在LaTeX中多次使用同一个标签&#xff08;label&#xff09;或者多次插入相同的图像/表格等时。例如&#xff0c;在LaTeX中&#xff0c;我们可能会为每一个章…

Modern C++ std::any为何要求Tp可拷贝构造?

小问题也会影响设计的思路&#xff0c;某个问题或某种case的探讨有助于理解设计的初衷。 声明&#xff1a;以下_Tp/Tp都是指要放入std::any的对象的类型。 它要求_Tp is_copy_constructible, 仅仅是因为有很多函数的实现调用了Tp的拷贝构造函数吗&#xff1f;比如说上节提到的初…

动态SQL的处理

学习视频&#xff1a;3001 动态SQL中的元素_哔哩哔哩_bilibili 目录 1.1为什么学 1.2动态SQL中的元素 条件查询操作 if 元素 choose、when、otherwise元素 where、trim元素 更新操作 set元素使用场景 复杂查询操作 foreach 元素中的属性 ​编辑 迭代数组 迭代List 迭代Map 1…

第3部分 原理篇2去中心化数字身份标识符(DID)(4)

3.2.3. DID解析 3.2.3.1. DID解析参与方 图3-5 DID 解析过程 本聪老师&#xff1a;我们之前提到过&#xff0c;DID 解析过程是将 DID 转换为对应的 DID 文档。这样做的目的是验证 DID 所代表的主体的身份。那么解析过程会涉及哪些概念呢&#xff1f;我们看图3-&#xff0c;DI…

端智能:面向手机计算环境的端云协同AI技术创新

近年来&#xff0c;随着移动端设备软硬件能力的进步&#xff0c;移动端的算力有了很大提升&#xff0c;同时面向移动端的机器学习框架和模型轻量化技术越来越成熟&#xff0c;端上的AI能力逐渐进入大众视野&#xff0c;端智能在电商领域也开始逐步走向规模化应用。通过持续探索…

leetcode日记(35)跳跃游戏Ⅱ

想了一个晚上&#xff0c;第一个思路是用动态规划&#xff0c;记录走到每一个节点需要跳动的最小步数&#xff0c;大致方法是每走到一个节点就遍历一下前面的全部节点&#xff0c;看看哪个节点可以一部跳到该节点&#xff0c;然后从中选取跳跃步数最小的节点&#xff0c;最后输…

基于springboot+vue的城镇保障性住房管理系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…