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

目录

一、(leetode 454)四数相加II

二、(leetcode 383)赎金信

暴力解法

哈希法 

三、(leetcode 15)三数之和

四、(leetcode 18)四数之和


一、(leetode 454)四数相加II

力扣题目链接

状态:已AC。搞懂了key、value的意义了

class Solution {
public:int fourSumCount(vector<int>& nums1, vector<int>& nums2, vector<int>& nums3, vector<int>& nums4) {unordered_map<int, int> umap; //key:a+b的数值,value:a+b数值出现的次数for (int a :nums1) {for (int b : nums2) {umap[a + b]++;}}int count = 0; // 统计a+b+c+d = 0 出现的次数// 在遍历大C和大D数组,找到如果 0-(c+d) 在map中出现过的话,就把map中key对应的value也就是出现次数统计出来。for (int c : nums3) {for (int d : nums4) {if (umap.find(0 - (c + d)) != umap.end()) {count += umap[0 - (c + d)];}}}return count;}
};

二、(leetcode 383)赎金信

力扣题目链接

状态:哈希法AC(类似242.有效的字母异位词),暴力法不熟悉erase用法,只了解了思路

暴力解法

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {for (int i = 0; i < magazine.length(); i++) {for (int j = 0; j < ransomNote.length(); j++) {// 在ransomNote中找到和magazine相同的字符if (magazine[i] == ransomNote[j]) {ransomNote.erase(ransomNote.begin() + j); // ransomNote删除这个字符break;}}}// 如果ransomNote为空,则说明magazine的字符可以组成ransomNoteif (ransomNote.length() == 0) {return true;}return false;}
};
iterator erase (iterator p);

其中,参数iterator是迭代器,即删除迭代器p指向的字符。返回值为删除后的字符串。

哈希法 

class Solution {
public:bool canConstruct(string ransomNote, string magazine) {int record[26] = {0};//addif (ransomNote.size() > magazine.size()) {return false;}for (int i = 0; i < magazine.length(); i++) {// 通过record数据记录 magazine里各个字符出现次数record[magazine[i]-'a'] ++;}for (int j = 0; j < ransomNote.length(); j++) {// 遍历ransomNote,在record里对应的字符个数做--操作record[ransomNote[j]-'a']--;// 如果小于零说明ransomNote里出现的字符,magazine没有if(record[ransomNote[j]-'a'] < 0) {return false;}}return true;}
};

三、(leetcode 15)三数之和

力扣题目链接

状态:思路清楚,代码错误过多,照着正确版本修改后AC,注意去重的逻辑,i-1、i和i+1

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> result;sort(nums.begin(), nums.end());// a = nums[i], b = nums[left], c = nums[right]for (int i = 0; i < nums.size(); i++) {// 排序之后如果第一个元素已经大于零,那么无论如何组合都不可能凑成三元组,直接返回结果就可以了if (nums[i] > 0) {return result;}if (i > 0 && nums[i] == nums[i - 1]) {continue;}int left = i + 1;int right = nums.size() - 1;while (right > left) {/*去重复逻辑如果放在这里,0,0,0 的情况,可能直接导致 right<=left 了,从而漏掉了 0,0,0 这种三元组/*while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;*/while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;*/if (nums[i] + nums[left] + nums[right] > 0) right--;else if (nums[i] + nums[left] + nums[right] < 0) left++;else {result.push_back(vector<int>{nums[i], nums[left], nums[right]});// 去重逻辑应该放在找到一个三元组之后,对b 和 c去重while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;right--;left++;}}}return result;}
};

四、(leetcode 18)四数之和

力扣题目链接

状态:已AC,不过剪枝处理是什么,还需要查+回顾

细节:

不要判断nums[k]>target 就返回了,三数之和 可以通过nums[i]>0就返回了,因为 0 已经是确定的数了,四数之和这道题目 target是任意值。比如:数组是[-4,-3,-2,-1]target-10,不能因为-4 > -10而跳过

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;sort(nums.begin(), nums.end());for (int k = 0; k < nums.size(); k++) {// 剪枝处理if (nums[k] > target && nums[k] >= 0) {break;}if (k > 0 && nums[k] == nums[k - 1]) {continue;}for (int i = k + 1; i < nums.size(); i++) {// 2级剪枝处理if (nums[k] + nums[i] > target && nums[k] + nums[i] >= 0) {break;}if (i > k + 1 && nums[i] == nums[i - 1]) {continue;}int left = i + 1;int right = nums.size() - 1;while (right > left) {// nums[k] + nums[i] + nums[left] + nums[right] > target 会溢出if ((long) nums[k] + nums[i] + nums[left] + nums[right] > target) {right--;// nums[k] + nums[i] + nums[left] + nums[right] < target 会溢出} else if ((long) nums[k] + nums[i] + nums[left] + nums[right]  < target) {left++;} else {result.push_back(vector<int>{nums[k], nums[i], nums[left], nums[right]});while (right > left && nums[right] == nums[right - 1]) right--;while (right > left && nums[left] == nums[left + 1]) left++;right--;left++;}}}}return result;}
};

 

 

 

 

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

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

相关文章

电涌保护器外部专用脱离器(SCB)后备保护器产品说明

为了更好的满足不同应用场景的市场需求&#xff0c;地凯科技经过两年多不断的研发与试验&#xff0c;对电涌保护器外部专用脱离器 SCB 后备保护器产品&#xff08;以下简称 SCB&#xff09;进行了技术升级&#xff0c;升级后的SCB 产品在电气性能、外观尺寸、智能化和可靠性等方…

springboot+vue智能诊后随访系统 java医院挂号预约诊断系统

本系统是基于java前端架构Vue用java编程语言及javascript、CSS、HTML语言进行编写设计并实现相关功能的。 设计步骤及措施&#xff1a; &#xff08;1&#xff09;确定项目名称、项目研究内容&#xff0c;开题报告提交及修改。 &#xff08;2&#xff09;项目开发准备&#xff…

[2023.09.26]: JsValue的转换体验与as关键字的浅析

昨天解决了焦点问题&#xff0c;今天就开始搬砖了。本以为可以一帆风顺&#xff0c;但是还是遇到了几个问题&#xff0c;不过还好&#xff0c;都被一一解决&#xff0c;这里我分享一下JsValue的转换体验以及关键字as的使用浅析。 场景描述 我是在什么情况下遇到JsValue的转换…

全志H616在低温reboot过程中进入休眠解决方法

主题 H618在DDR物料适配支持时候&#xff0c;reboot实验异常进休眠&#xff0c;在reboot老化测试中报如下log1 [2023-07-11,16:56:44][ 40.325238][ T1] init: Untracked pid 1888 exited with status 0 [2023-07-11,16:56:44][ 40.325295][ T5] binder: undeliver…

比起“如果环境这样这样,那便那样那样”,我更喜欢听到“要怎样怎样变成想要的样子”

比起“如果环境这样这样&#xff0c;那便那样那样”&#xff0c;我更喜欢听到“要怎样怎样变成想要的样子” 许多事情不只是选择题、判断题&#xff0c;还可以是填空题、论文&#xff0c;重点是你怎么看待&#xff0c;格局有没有打开.

中睿天下参展2023海军工程大学首届网络安全文化周并发表主题演讲

2023年9月3日至9月8日&#xff0c;海军工程大学首届网络安全文化周活动于武汉举办。本次活动以“守护蓝疆网安有我”为主题&#xff0c;设有特邀嘉宾前沿讲座、网络安全圆桌交流论坛、网络安全科技展、网络对抗实战竞技、网络安全保密视频创作和信息安全知识竞赛等系列活动。 海…

自学WEB后端03-Node.js 语法

学习后端路线&#xff1a; JavaScript 基础语法 Node,js 内置 API 模块 (fs、 path、 http等) 第三方 API 模块 (express、mysql等) 今天主要回顾下Node.js 语法 Node.js 是基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它提供了一种能够在服务器端运行 JavaScr…

Selenium和Requests搭配使用

Selenium和Requests搭配使用 前要1. CDP2. 通过requests控制浏览器2. 1 代码一2. 2 代码2 3. 通过selenium获取cookie, requests携带cookie请求 前要 之前有提过, 用selenium控制本地浏览器, 提高拟人化,但是效率比较低,今天说一种selenium和requests搭配使用的方法 注意: 一定…

2023网络安全面试题(附答案)+面经

前言 随着国家政策的扶持&#xff0c;网络安全行业也越来越为大众所熟知&#xff0c;相应的想要进入到网络安全行业的人也越来越多&#xff0c;为了拿到心仪的Offer之外&#xff0c;除了学好网络安全知识以外&#xff0c;还要应对好企业的面试。 所以在这里我归纳总结了一些网…

软件的开发步骤,需求分析,开发环境搭建,接口文档 ---苍穹外卖1

目录 项目总览 开发准备 开发步骤 角色分工 软件环境 项目介绍 产品原型 技术选型 开发环境搭建 前端:默认已有 后端 使用Git版本控制 数据库环境搭建 前后端联调 ​登录功能完善 导入接口文档 使用swagger​ 和yapi的区别 常用注解 项目总览 开发准备 开发步骤…

解决方案(一)蓄水池抽样算法(可用于抽样,抽奖等场景)

蓄水池抽样算法 描述Java基本实现蓄水池模型参与抽样 描述 该算法可用于从数据流中随机抽取指定数量的样本。 假设目标样本数量为 n&#xff0c;参与抽样的数量为 i。 蓄水池容量为 n&#xff0c;参与抽样的数量为 i 每接收一个样本&#xff0c;不断计算抽样结果&#xff1a;…

协程是什么?为何说协程具有同步的编程方式又具有异步的性能?

协程&#xff08;Coroutine&#xff09;是一种并发编程模型&#xff0c;它允许程序在单线程内实现多个独立的执行线程&#xff0c;这些线程可以非阻塞地挂起和恢复&#xff0c;以实现协作式多任务处理。协程的核心思想是让程序员能够控制执行的流程&#xff0c;而不是完全交给操…

如何通过bat批处理实现快速生成文件目录,一键生成文件名和文件夹名目录

碰对了情人&#xff0c;相思一辈子。 具体方法步骤&#xff1a; 一、创建一个执行bat文件&#xff08;使用记事本即可&#xff09;&#xff1b; 1、新建一个txt文本空白记事本文件 2、复制以下内容进记事本内 dir/a/s/b>LIST.TXT &#xff08;其中LIST.TXT文件名是提取后将…

爬虫入门基础-HTTP协议过程

在进行网络爬虫开发之前&#xff0c;了解HTTP协议的基本过程是非常重要的。HTTP协议是Web通信的基础&#xff0c;也是爬取网页数据的核心。本文将为您详细介绍HTTP协议的过程&#xff0c;帮助您理解爬虫背后的网络通信机制。让我们一起来探索吧&#xff01; 一、什么是HTTP协议…

Linux入门教程||Shell echo命令||Shell printf 命令

Shell 的 echo 指令与 PHP 的 echo 指令类似&#xff0c;都是用于字符串的输出。命令格式&#xff1a; echo string您可以使用echo实现更复杂的输出格式控制。 1.显示普通字符串: echo "It is a test"这里的双引号完全可以省略&#xff0c;以下命令与上面实例效果一…

产权未转移登记的离婚析产协议不能对抗债权人

债权人代位析产纠纷作为一个新的民事案由&#xff0c;是民事执行阶段中债务人不能到期清偿债务&#xff0c;又怠于分割共同财产或以诉讼方式分割共同财产&#xff0c;而由债权人请求代替债务人向其他共有人提出分割财产以实现债权的诉讼。债权人代位析产&#xff0c;增加了债权…

小皮面板配置Xdebug,调试单个php文件

小皮面板配置Xdebug 首先下载phpstrom&#xff0c;和小皮面板 打开小皮面板&#xff0c;选中好要使用的php版本 然后点击【管理】> 【php扩展】> 【xdebug】 然后打开选中好版本的php位置 D:\Program_Files\phpstudy_pro\Extensions\php\php7.4.3nts打开php.ini文件…

Java8实战-总结34

Java8实战-总结34 重构、测试和调试使用 Lambda 重构面向对象的设计模式观察者模式责任链模式 重构、测试和调试 使用 Lambda 重构面向对象的设计模式 观察者模式 观察者模式是一种比较常见的方案&#xff0c;某些事件发生时&#xff08;比如状态转变&#xff09;&#xff0…

积分商城运营成功的7个关键要素

积分商城是一种受欢迎的私域营销工具&#xff0c;可以帮助企业吸引和留住客户&#xff0c;提高销售和客户忠诚度。然而&#xff0c;要确保积分商城的运营成功&#xff0c;需要考虑多个关键要素。本文将深入探讨这些要素&#xff0c;以帮助企业打造一个成功的积分商城。 第一要…

VIO和预积分(蒙圈的请过来,带你不蒙圈)

大佬的世界&#xff0c;你不会懂&#xff0c;就像一行行公式&#xff0c;人家觉得很简单&#xff0c;你却要读很多遍&#xff0c;不过还好&#xff0c;我们从普通人的世界来解读VIO和预积分。 预积分 拿大佬的话来热场&#xff0c;本章要介绍一种在紧耦合系统中十分常见的IMU…