代码随想录刷题随记6-哈希表2,双指针

代码随想录刷题随记6-哈希表2,双指针

454.四数相加II

leetcode链接
这道题目是四个独立的数组,只要找到A[i] + B[j] + C[k] + D[l] = 0就可以,不用考虑有重复的四个元素相加等于0的情况
思路可以把A和B相加做成map,C和D相加做成另一个map。这样就把问题转化为上一篇文章中提到的两数之和题目了。
解题代码:

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

383. 赎金信

leetcode链接

这道题与之前的异位词问题很相似

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

第15题. 三数之和

leetcode链接
与之前四数相加不同的是这里的要求是不重复的三元组,所以解题难度有所提升,不能再用之前的思路
采用双指针的思路解决问题
首先先将数组进行排序,然后依次按顺序取数。由于数组是有序的,我们取两个指针分别记作left和right。当三个数相加<0的时候,说明left需要右移。反之如果大于0说明right需要左移。
主要需要注意去重逻辑的思考。
解题代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {sort(nums.begin(),nums.end());if(nums[0]>0){return {};}vector<vector<int>> result;for(int i=0;i<nums.size();i++){while(i>0&&i<nums.size()&&nums[i]==nums[i-1]){//continue;//这里不能写i++,如果用if写continue 如果用while写i++i++;}int left=i+1;int 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{result.push_back({nums[i],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 result;}
};

第18题. 四数之和

leetcode 链接
答案中不可以包含重复的四元组,是第一个四个数相加的加强版
四数之和的双指针解法是两层for循环nums[k] + nums[i]为确定值,依然是循环内有left和right下标作为双指针,找出nums[k] + nums[i] + nums[left] + nums[right] == target的情况,三数之和的时间复杂度是 O ( n 2 ) O(n^2) O(n2) ,四数之和的时间复杂度是 O ( n 3 ) O(n^3) O(n3)
那么一样的道理,五数之和、六数之和等等都采用这种解法。
解题代码

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>>  ret;sort(nums.begin(),nums.end());for(int k=0;k<nums.size();k++){//这里一定要加上nums[k]>0条件,因为俩负数相加会变得更小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++){if((nums[i]+nums[k])>target&&((nums[i]+nums[k])>=0)){break;}if(i>(k+1)&&nums[i]==nums[i-1]){continue;} int left=i+1;int right=nums.size()-1;while(left<right){// nums[k] + nums[i] + nums[left] + nums[right] > target 会溢出if((long)nums[k]+nums[i]+nums[left]+nums[right]>target){right--;}else if((long)nums[k]+nums[i]+nums[left]+nums[right]<target){left++;}else{ret.push_back({nums[k],nums[i],nums[left],nums[right]});while(left<right&&nums[right]==nums[right-1]){right--;}while(left<right&&nums[left]==nums[left+1]){left++;}left++;right--;}}}}return ret;}
};

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

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

相关文章

MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误

参考MQTT.fx和MQTTX 链接ONENET物联网开发平台避坑细节干货。_mqttx和mqttfx-CSDN博客 在输入password和username后还是提示错误&#xff0c;是因为在使用token的时候&#xff0c;key填写错误&#xff0c;将设备的密钥填入key中

How to convert .py to .ipynb in Ubuntu 22.04

How to convert .py to .ipynb in Ubuntu 22.04 jupyter nbconvertp2j 最近看到大家在用jupyter notebook&#xff0c;我也试了一下&#xff0c;感觉还不错&#xff0c;不过&#xff0c;也遇到了一些问题&#xff0c;比方说&#xff0c;我有堆的.py文件&#xff0c;如果要一个一…

堆排序-C语言

算法思想&#xff1a; 建立一个大根堆;&#xff08;将一棵普通的树转化为大根堆&#xff09; 每次将根和待排序的最后一个交换,然后再调整,循环len-1次即可; 调整为大根堆的方法&#xff1a; 从最后一棵子树开始,从后往前调整; 每次调整,从上往下; 调整为大根堆; 堆调整的代…

赛氪网亮相中国人工智能产业发展联盟会议,共筑赛事生态新篇章

2024年3月14日至15日&#xff0c;备受瞩目的中国人工智能产业发展联盟&#xff08;AIIA&#xff09;第十一次全体会议在海南海口盛大召开。作为人工智能领域的重要交流与合作平台&#xff0c;此次会议吸引了300余位联盟成员单位代表齐聚一堂&#xff0c;共襄盛举。在这场人工智…

blog-engine-07-gatsby 建极速网站和应用程序 基于React的最佳框架,具备性能、可扩展性和安全性。

拓展阅读 blog-engine-01-常见博客引擎 jekyll/hugo/Hexo/Pelican/Gatsby/VuePress/Nuxt.js/Middleman 对比 blog-engine-02-通过博客引擎 jekyll 构建 github pages 博客实战笔记 blog-engine-02-博客引擎jekyll-jekyll 博客引擎介绍 blog-engine-02-博客引擎jekyll-jekyl…

NIO与AIO

NIO与AIO NIO模型 在 LInux 环境中&#xff0c;java.nio.channels.Selector 的子类叫做 sun.nio.ch.EPollSelectorImpl &#xff0c;其底 层是基于 Epoll 模型去实现的 IO 多路复用器。 对于 Epoll 模型 我们需要了解到它底层的三个函数 在 JDK 实现的底层中&#xff0c;EPol…

某对象存储元数据集群改造流水账

软件产品&#xff1a;某厂商提供的不便具名的对象存储产品&#xff0c;核心底层技术源自HDFS和Amazon S3&#xff0c;元数据集群采用了基于MongoDB的NOSQL数据库产品和MySQL数据库产品相结合。 该产品的元数据逻辑示意图如下&#xff1a; 业务集群现状&#xff1a;当前第3期建…

面试(二)

目录 1.STL六大部件 2.STL容器 3.汇编 4.基于Freertos工训机器人面试 5.opencv常用函数 6.陀螺仪模块 JY901B 7.增量式与位置式PID区别&#xff1a; 8.MQTT 12.描述一下gcc的编译过程&#xff1f; 13.内存的最⼩存储单位以及内存的最⼩计量单位分别是&#xff1f; 14…

勾八头歌之分类回归聚类

一、机器学习概述 第1关机器学习概述 B AD B BC 第2关常见分类算法 #编码方式encodingutf8from sklearn.neighbors import KNeighborsClassifierdef knn(train_data,train_label,test_data):input:train_data用来训练的数据train_label用来训练的标签test_data用来测试的数据…

【Monero】Onion Monero Blockchain Explorer | 洋葱门罗币区块链浏览器

github&#xff1a;onion-monero-blockchain-explorer Onion Monero Blockchain Explorer特点: • 没有cookie&#xff0c;没有网络分析跟踪器&#xff0c;没有image&#xff0c; • 开源&#xff0c; • 完全用C编写&#xff0c; • 显示加密的付款 ID&#xff0c; • 显示环…

Django auth模块

【一】命令行创建用户 【1】语法 python manage.py createsuper【2】示例 用户名 默认是是电脑名称 邮箱 可以填也可以不填 密码 terminal中&#xff1a;输入密码不显示出来manage.py中&#xff1a;明文输入输入密码太简单会提示 Username (leave blank to use administra…

20231911 2022-2023-2 《网络攻防实践》实验三

1.实验内容 1、实践tcpdump 使用tcpdump开源软件对在本机上访问www.tianya.cn网站过程进行嗅探&#xff0c;回答问题&#xff1a;你在访问www.tianya.cn网站首页时&#xff0c;浏览器将访问多少个Web服务器&#xff1f;他们的IP地址都是什么&#xff1f; 2、实践Wireshark 使…

Cesium for UE-03-添加数据集(倾斜摄影)

继续上一章节&#xff0c;在创建了项目和关卡的基础上添加倾斜摄影 重新打开上次的项目和关卡 如果你已经关掉了上次的项目和关卡&#xff0c;可以重新打开ue&#xff0c;然后选择 选择 文件-打开关卡&#xff0c;在弹出的窗口中&#xff0c;选择 上次的关卡&#xff0c;并点击…

从汇编以及栈帧层面理解内联函数的原理

宏太复杂&#xff0c;所以弄出内联&#xff0c;内联适合小函数&#xff0c;把函数连到程序里面&#xff0c;这样就直接用&#xff0c;不需要调用&#xff0c;但是它占用空间。 C推荐 const和enum替代宏常量 inline去替代宏函数 宏缺点&#xff1a; 1、不能调试 2、没有类型安…

多层感知机-----自我神经MLP入门笔记

多层感知机&#xff08;Multilayer Perceptron, MLP&#xff09;是一种常见的人工神经网络&#xff08;Artificial Neural Network, ANN&#xff09;模型&#xff0c;它由多个人工神经元组成的多层结构。每个神经元都与前一层的所有神经元连接&#xff0c;并且每条连接都有一个…

【ZZULIOJ】1004: 三位数的数位分离(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 从键盘输入一个任意的三位正整数&#xff0c;分别求出其个位、十位和百位上的数字。 输入 输入任意的一个三位正整数。 输出 依次输出个位、十位、百位上的数字。以空格间隔&#xff0c;但最后一…

HarmonyOS(鸿蒙开发)入门篇

如果需要学习鸿蒙开发可以查看以下学习资源链接 OpenAtom OpenHarmony Develop applications - HUAWEI HarmonyOS APP 转载请注明出处HarmonyOS(鸿蒙开发&#xff09;入门篇-CSDN博客&#xff0c;谢谢&#xff01;

【ZZULIOJ】1000: 从今天开始入坑C语言(Java)

目录 题目描述 输入 输出 样例输入 样例输出 code 题目描述 “C语言”在程序设计语言中是个闪亮的名字&#xff0c;每个学习计算机及相关专业的人在学习程序设计语言时都会首先关注它。C语言是 20 世纪 70 年代初在贝尔实验室开发出来的一种广为使用 的计算机程序设计语言…

如何使用PHP和RabbitMQ实现延迟队列(方式一)?

前言 今天我们来做个小试验&#xff0c;用PHP和RabbitMQ实现消息队列的延迟功能。 前期准备&#xff0c;需要安装好docker、docker-compose的运行环境。 需要安装RabbitMQ的可以看下面这篇文章。 如何使用PHP和RabbitMQ实现消息队列&#xff1f;-CSDN博客 一、安装RabbitM…