代码随想录训练营第六天 454四数相加II 383赎金信 15三数之和 18四数之和

第一题:

原题链接:454. 四数相加 II - 力扣(LeetCode)

思路:

将四个数组分成两两 两个组合,先对前面两个数组进行操作

定义unordered_map<int, int> map,将第一个和第二个数组中的元素相加并填入map中,记录相加之后元素的值对应出现的个数。

然后再对第三和第四个数组进行操作

定义一个值target为第三和第四数组中元素相加后取反,在map中查找该元素是否存在,若存在结果+=map[target]。因为存在证明在第一个和第二个数组中存在对应元素出现的个数。

代码如下:

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> map;for(auto a : nums1){for(auto b : nums2){map[a + b] += 1;}}int res = 0;for(auto c : nums3){for(auto d : nums4){int target = -(c + d);if(map.find(target) != map.end()){res += map[target];}}}return res;}
};

第二题:

原题链接:383. 赎金信 - 力扣(LeetCode)

思路:

定义unordered_map<char, int> map,遍历第一个字符串,记录每个字符出现的次数,

遍历第二个字符串,当出现和map中存在的字符,记录的次数减一,

最后遍历整个map,观察每个pair中的第二值是否>0,是则说明无法构成,返回false,反之为true;

代码如下:

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char, int> map;for(int i = 0; i < ransomNote.size(); i++){map[ransomNote[i]] += 1;}for(int i = 0; i < magazine.size(); i++){if(map.find(magazine[i]) != map.end()){map[magazine[i]] -= 1;}}for(auto x : map){if(x.second > 0){return false;}}return true;}
};

第三题:

原题链接:15. 三数之和 - 力扣(LeetCode)

思路:

此题用双指针更好做一些。

首先对数组进行排序,这点很关键,可以剪枝。应为题目要求不能包含重复的三元组,因此不能出现重复的元素。当我们排完序之后,想同的元素就紧挨在一起便于我们操作

遍历整个数组,然后定义两根指针分别指向当前遍历的位置加一和数组末尾的位置。先判断我们当前遍历的位置的值是否大于0,如果大于0直接返回res,因为排过序后当前值大于0后面的值也大于0。剪枝操作:当前元素和前一个元素的值相同,可以直接跳过。

接在在right > left的循环里判断三数之和是否大于0,大于0right--,如果小于0left++,如果等于0,将这三个值插入res中,然后判断left的值和left+1的值是否相同,相同也要跳过。right同理。

最后返回res。

代码如下:

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(nums[i] > 0) return res;if(i > 0 && nums[i] == nums[i - 1]) continue;int left = i + 1, right = nums.size() - 1;while(left < right){if(nums[i] + nums[left] + nums[right] < 0){left++;}else if(nums[i] + nums[left] + nums[right] > 0){right--;}else{res.push_back({nums[i], nums[left], nums[right]});while(right > left && nums[right - 1] == nums[right]) right--;while(right > left && nums[left + 1] == nums[left]) left++;left++;right--;}}}return res;}
};

第四题

原题链接:18. 四数之和 - 力扣(LeetCode)

思路:
和上一题相似,就是在套一层循环.

代码如下:

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

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

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

相关文章

线性代数|机器学习-P13计算特征值和奇异值

文章目录 1. 特征值1.1 特征值求解思路1.1 相似矩阵构造 1. 特征值 1.1 特征值求解思路 我们想要计算一个矩阵的特征值&#xff0c;一般是用如下公式&#xff1a; ∣ ∣ A − λ I ∣ ∣ 0 → λ 1 , λ 2 , ⋯ , λ n \begin{equation} ||A-\lambda I||0\rightarrow \lamb…

汇聚荣科技有限公司实力强吗?

汇聚荣科技有限公司实力强吗?在当今快速发展的科技行业中&#xff0c;公司的实力往往决定了其市场竞争力和发展前景。对于汇聚荣科技有限公司而言&#xff0c;其是否具备强大的实力&#xff0c;不仅关系到自身的发展&#xff0c;也影响着投资者和合作伙伴的选择。因此&#xf…

植物大战僵尸杂交版2.1版本重磅发布!更新内容介绍讲解

植物大战僵尸杂交版2.1版&#xff0c;简直是游戏迷们的福音&#xff01;这个版本不仅更新了大量的新植物和僵尸角色&#xff0c;还加入了更多的游戏模式和挑战关卡&#xff0c;让玩家们可以更加畅快地玩耍。 植物大战僵尸杂交版V2.1 :苹果安卓 PC防闪退工具修改工具高清工具通关…

16个不为人知的资源网站,强烈建议收藏!

整理了16个不为人知的资源网站&#xff0c;涵盖了课程学习、办公技能、娱乐休闲、小说音乐等多种资源&#xff0c;强烈建议收藏&#xff01; #学习网站 1、中国大学MOOC icourse163.org/ 这是一个汇集了国内顶尖大学免费课程资源的平台&#xff0c;众多985工程院校如北京大…

将HTML转化为PDF,一键操作轻松实现高效文件转换,轻松应对多种需求场景

在信息时代的浪潮中&#xff0c;文件格式的转换已经成为我们日常工作、学习和生活中不可或缺的一部分。无论是网页内容的保存、报告的整理还是简历的发送&#xff0c;我们经常需要将HTML文档转换为PDF格式&#xff0c;以确保文件内容的完整性和可读性。然而&#xff0c;传统的转…

rollup打包项目:rollup.config.js

rollup打包带vue文件的项目 import nodeResolve from rollup/plugin-node-resolve import babel from rollup/plugin-babel import commonjs from rollup/plugin-commonjs; import vuePlugin from rollup-plugin-vue; import typescript from rollup-plugin-typescript2; impo…

3dmax在设计3D模型时闪退解决方法---模大狮模型网

3ds Max 在设计 3D 模型时闪退可能由多种原因造成&#xff0c;以下是一些常见的解决方法&#xff1a; 更新显卡驱动程序&#xff1a; 一个过时或不稳定的显卡驱动程序可能导致 3ds Max 闪退。请确保你的显卡驱动程序是最新版本&#xff0c;并且与 3ds Max 兼容。 关闭不必要的…

基于MCGS的双容水箱液位控制系统设计【MCGS+MATLAB+研华工控机】

摘 要 液位控制技术在众多工业领域中扮演着至关重要的角色。无论是化工、制药、食品加工还是水处理行业&#xff0c;对液位进行精确控制都是保证生产流程稳定、产品质量可靠的关键环节。因此基于实验平台设计了液位自动控制系统。首先&#xff0c;根据实际液位的控制需求&…

【SpringCloud学习笔记】RabbitMQ(上)

1. RabbitMQ简介 官网地址&#xff1a;https://www.rabbitmq.com/ 2. 安装方式 安装前置准备&#xff1a; 此处基于Linux平台 Docker进行安装&#xff0c;前置准备如下&#xff1a; Linux云服务器 / 虚拟机Docker环境 安装命令&#xff1a; docker run \-e RABBITMQ_DEFAU…

大文件word生成的处理与解决策略

前言 对于简单word文档的生成导出&#xff0c;java已经有着很多技术来进行处理&#xff0c;在有着相对固定的格式样板下&#xff0c;采用word模板导出相对会是比较好的选择。但是当数据量且包含大量图片后&#xff0c;采用模板导出就显得无力了&#xff0c;模板的缺点是无法应…

visdom使用时所遇的问题及解决方法

最近在用visdom进行可视化的过程中&#xff0c;虽然可有效的避免主机拒绝访问&#xff08;该问题的解决方法&#xff0c;请参考深度学习可视化工具visdom使用-CSDN博客&#xff09;即在终端输入python -m visom.server 1.训练过程中visdom出现ValueError: too many file descr…

C#知识|基于实体类对象,返回实体集合封装介绍。

哈喽,你好啊,我是雷工! 前面通过实体类封装传递了零散的参数,打包后给数据访问方法。 但当查询结果是数据集,要把查询到的数据返回给UI时,我们也可以把返回的多条零散数据封装到实体类中。 此次练习可以使用实体容器:泛型集合List<T>,当把每条数据封装成实体对…

pytorch中,load_state_dict和torch.load的区别?

在 PyTorch 中&#xff0c;load_state_dict 和 torch.load 是两个不同的函数&#xff0c;用于不同的目的。 torch.load: 用途: 从磁盘加载一个保存的对象。这个对象可以是一个模型的整个状态字典&#xff08;包含模型参数&#xff09;、优化器状态字典、甚至是任意其他 Python …

简约不简单,建筑装饰演绎现代美学

走在城市的大街小巷&#xff0c;你是否曾被那些独特而精美的建筑装饰所吸引&#xff1f;每一栋建筑都像是艺术家的杰作&#xff0c;通过精美的装饰诉说着它的故事。 我们的建筑装饰&#xff0c;不仅注重外在的美观&#xff0c;更追求内在的品质。从古典的雕花到现代的简约线条&…

Bash脚本:删除根目录内的所有node_modules文件夹

Bash脚本&#xff1a;删除根目录内的所有node_modules文件夹 常用脚本 #!/bin/bash # find . -name "node_modules" -type d -prune -print -exec rimraf {} \;# find . -name "node_modules" -type d -prune&#xff1a;使用 find 命令查找当前目录及其…

Mac 下载并激活IDEA

1.https://3.jetbra.in 打开这个网站,点击第一个网速比较快的连接 2.在新页面顶部有一个蓝色的下载链接文字< jetbra.zip(20220801) >点击下载 3.步骤2打开的页面不要关闭后面还有用 4.在idea官网下载idea对应的版本 https://www.jetbrains.com/idea/download/other.htm…

Chromium源码阅读:Mojo实战:从浏览器JS API 到blink实现

​ 通过在前面几篇文章&#xff0c;我们粗略梳理了Mojo这套跨进程通信的设计思路和IDL细节。 实际上&#xff0c;Mojo不止是跨进程通信框架&#xff0c;而是跨语言的模块通信自动化系统。 在浏览器暴露的JS API&#xff0c;也是需要通过Mojo这个系统进行桥接&#xff0c;最终…

APP怎么上架到应用商店

以下是一般将 App 上架到应用商店的基本步骤&#xff1a; 苹果 App Store 上架步骤&#xff1a; 1. 注册苹果开发者账号。 2. 创建 App ID。 3. 准备相关资料&#xff0c;如应用图标、截图、描述等。 4. 在苹果开发者平台上填写 App 信息&#xff0c;包括名称、类别、功能…

两融账户算法交易用什么好?

我们之前讲了许多关于算法交易的内容&#xff0c;但是很多家人们都在找小编反馈&#xff0c;就是两融账户的算法交易能不能使用&#xff1f;遇到集中度的问题怎么办&#xff1f;两融T0有利息吗&#xff1f; 等等一些列问题&#xff0c;小编给大家做了一个整理归纳&#xff0c;我…

蓝牙BLE上位机工具开发理论线索梳理_2.AEP是个啥?

1.1什么是终结点&#xff1f; 终结点是通过计算机网络&#xff08;如计算机、移动设备和服务器&#xff09;连接和交换信息的设备。 物联网 (IoT) 设备&#xff08;如相机、智能恒温器和扬声器&#xff09;等其他设备也被视为终结点。 与之相反的是&#xff0c;运行网络的设备&…