力扣双指针算法题目:双数之和,三数之和,四数之和

目录

一:双数之和

1.题目:

2.思路解析

3.代码

二:三数之和

1.题目

2.思路解析

3,代码

三:四数字之和

1.题目

2.思路解析

3.代码


一:双数之和

1.题目:

输入一个递增排序的数组和一个数字s,在数组中查找两个数,使他们的和正好是s,如果有多对数字的和是s,则输出一对即可

2.思路解析

这个题目要求检索数组中两个数字的和为s,那么就需要使用双指针去遍历这个数组,每遍历一次,就和s对比一下

暴力求解就是枚举法,时间复杂度太大了,这里不过多赘述

如果是稍微巧妙一点的解法,便是将left初始化放在数组最左边,right最右边,然后二者向着中间遍历,

一边遍历一边对left和right所指向的数字求和(sum),并且和目标值target对比,

如果比target小,那么就是小的数字(left)太小了,那么就需要left++,

如果比target大,那么就是大的数字太大了,就需要right--

3.代码

至于题目中的要求“如果有多对数字的和是s,则输出一对即可”,这句话的意思就是要“去重”,在STL中,我们可以直接使用容器“set”直接去重,至于如何手搓轮子,请向下看

二:三数之和

1.题目

2.思路解析

总而言之就是双指针的思维基础下又在上面套了一层循环

a.先将无需数组排列成有序数组

b. 双指针:cur自左向右遍历,cur对数组的遍历作为最外层的循环,本体中,我们的target=0

所以需要三个数字和为0,那么left和right所指向的数字的和必然是cur所指向的数字的相反数

由于是有序数组,具有单调性,如果cur>0,那么后面必然是正数,此情况便可以排除

c:去重操作:

left去重:left向右移动一格,如果和上一个数字相同,那么便skip

right去重:right向左移动一格,如果和上一个数字相同,那么skip

cur去重:cur向右走,每次向右都要注意越界(left<right)

d:cur++是最外层的循环。

3,代码

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums){vector<vector<int>> ret;sort(nums.begin(), nums.end());int n = nums.size();int cur = 0;while(cur<n){int left = cur + 1, right = n - 1;int target = -nums[cur];while (left < right){int sum = nums[left] + nums[right];if (nums[cur] > 0) break;if (sum < target){left++;}else if (sum > target){right--;}else{ret.push_back({ nums[cur],nums[left],nums[right] });left++;right--;while (left < right && nums[left] == nums[left - 1]) { left++; }while (left < right && nums[right] == nums[right + 1]) { right--; }}}cur++;while (cur < nums.size() && nums[cur] == nums[cur - 1]) { cur++; }}return ret;}
};

总结:三数之和的大体思路就是

首先明确一点最后要转换成双指针

因为需要找到三个数字之和为target

所以先将cur固定住,再另外两个数字(双指针操作)和为target-cur

三:四数字之和

1.题目

. - 力扣(LeetCode)

2.思路解析

这个四数之和的思路不能说和三数之和类似,只能说是一摸一样的,不管几个数字,其核心思路都是最开始的双数之和

如果要将四数之和变成双指针双数之和思想,那么和三数之和一样,将双数之和外套两个循环

仍然是双指针遍历相加然后和target进行对比

3.代码

class Solution {
public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> ret;sort(nums.begin(),nums.end());int n=nums.size();int a=0;while(a<n){int b=a+1;while(b<n){long long aim=(long long)target-(long long)nums[a]-(long long)nums[b];int left=b+1,right=n-1;while(left<right){int sum=nums[left]+nums[right];if(sum<aim) {left++;}else if(sum>aim) {right--;}else{ret.push_back({nums[a],nums[b],nums[left],nums[right]});left++; right--;while(left<right&&nums[left]==nums[left-1]) {left++;}while(left<right&&nums[right]==nums[right+1]) {right--;}}}b++;while(b<n&&nums[b]==nums[b-1]) {b++;}}a++;while(a<n&&nums[a]==nums[a-1]) {a++;}}return ret;}
};

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

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

相关文章

EtherCAT主站IGH-- 9 -- IGH之eoe_request.h/c文件解析

EtherCAT主站IGH-- 9 -- IGH之eoe_request.h/c文件解析 0 预览一 该文件功能`eoe_request.c` 文件功能函数预览二 函数功能介绍1. `ec_eoe_request_init`示例用法示例详细说明三 h文件翻译四 c文件翻译该文档修改记录:总结0 预览 一 该文件功能 该文件定义了用于 EtherCAT 的…

【DOM】实现一个课程表的拖拽功能

历史小剧场 一个皇帝从不需要用个人的良好品格来证明自己的英明&#xff0c;恰恰相反&#xff0c;在历史上&#xff0c;干皇帝这行的人基本都不是什么好人&#xff0c;因为好人干不了皇帝&#xff0c;朱匀炆就是铁证。----《明朝那些事儿》 1. 前置知识 1.1 DataTransfer接口 …

怎么有逻辑的说话?

怎么有逻辑的说话&#xff0c;一节黄执中的课。 平时我们常会被说说话没有逻辑&#xff0c;那么什么叫做有逻辑呢&#xff1f; 黄执中说有明确的主张就是有逻辑。这里的主张&#xff0c;包括了有议题&#xff0c;有结论&#xff0c;有理由。 举一个正面的例子&#xff0c;比…

贵州建筑三类人员安全员2024年考试最新题库练习题

一、单选题 1.建设工程安全管理的方针是&#xff08;&#xff09;。 A.安全第一&#xff0c;预防为主&#xff0c;综合治理 B.质量第一&#xff0c;兼顾安全 C.安全至上 D.安全责任重于泰山 答案&#xff1a;A 2.安全生产管理的根本目的是&#xff08;&#xff09;。 A.…

Lunaproxy与711Proxy的对比与优劣分析

今天我们来深入对比两款在市场上备受关注的代理IP服务&#xff1a;Lunaproxy和711Proxy。接下来&#xff0c;我们将从多个角度对这两款服务进行详细分析&#xff0c;帮助大家做出明智的选择。 优势分析 711Proxy的优势 1. 性价比高&#xff1a;711Proxy提供多种灵活的套餐选…

伪元素content追加文字使用小技巧

E::before和E::after本身的作用是追加字&#xff0c;直接在文字后面追加链接 <!DOCTYPE html> <html lang"zh-cn"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

AI文本转语音,再也不用担心视频配音了.

文章目录 简介代码实现调用开通百度付费包 简介 背景 我想要将文本,转为语音,然后配上图片,这样就可以很快生成一个视频. 可以说是配音吧,我还是比较喜欢通过代码来自动化.所以今天就来实现一下,同时做一下分享和记录.目标 通过python代码,自动将文本转为配音.平台 我选择了百…

中位值平均滤波法(又称防脉冲干扰平均滤波法)

中位值平均滤波法(又称防脉冲干扰平均滤波法) 中位值平均滤波法:采一组队列去掉最大值和最小值后取平均值,相当于“中位值滤波法”+“算术平均滤波法”。连续采样N个数据,去掉一个最大值和一个最小值,然后计算N-2个数据的算术平均值。 优点:融合了“中位值滤波法”+“算…

万界星空科技MES系统中的排版排产功能

在当今高度竞争的市场环境中&#xff0c;企业对于生产管理的效率和质量要求日益提高。作为智能制造的重要组成部分&#xff0c;制造执行系统&#xff08;MES&#xff09;以其强大的功能&#xff0c;在提升企业生产能力方面发挥着不可替代的作用。万界星空科技作为行业领先的智能…

MongoDB集群搭建-最简单

目录 前言 一、分片概念 二、搭建集群的步骤 总结 前言 MongoDB分片&#xff08;Sharding&#xff09;是一种水平扩展数据库的方法&#xff0c;它允许将数据分散存储在多个服务器上&#xff0c;从而提高数据库的存储容量和处理能力。分片是MongoDB为了应对大数据量和高吞吐量需…

Git温习

基本流程 工作区–>暂存区–>本地仓库–>远程仓库 基本配置 git config user.name [用户名] 设置用户名添加–project&#xff0c;针对当前项目生效&#xff08;默认&#xff09;添加–global&#xff0c;针对当前用户生效&#xff08;示例&#xff1a;git config -…

vivado CONFIG_MODE、CONFIG_VOLTAGE

配置模式 CONFIG_MODE属性定义要用于的设备配置模式 引脚分配、DRC报告和比特流生成。 重要提示&#xff1a;COMPATIBLE_CONFIG_MODES属性在2013.3版本中已被弃用&#xff0c;并且 被CONFIG_MODE属性替换。 Xilinx FPGA可以通过加载特定于应用程序的配置数据或 比特流通过特殊的…

ChatGPT-4 对比 ChatGPT-3.5:有哪些优势

引言 ChatGPT4相比于ChatGPT3.5,有着诸多不可比拟的优势&#xff0c;比如图片生成、图片内容解析、GPTS开发、更智能的语言理解能力等&#xff0c;但是在国内使用GPT4存在网络及充值障碍等问题&#xff0c;如果您对ChatGPT4.0感兴趣&#xff0c;可以私信博主为您解决账号和环境…

composables 目录下的文件(web前端)

composables 目录通常用于存放可组合的函数或逻辑&#xff0c;这些函数或逻辑可以在不同的组件中复用。具体来说&#xff0c;composables 目录下的文件通常包含以下内容&#xff1a; 组合式函数 (Composable Functions)&#xff1a; 这些函数利用 Vue 3 的组合式 API&#xff0…

Science期刊政策反转:允许生成式AI用于论文写作,意味着什么?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 关于各大top期刊和出版社对于生成式AI用于论文写作中的规定&#xff0c;娜姐之前写过一篇文章&#xff1a; 如何合理使用AI写论文&#xff1f;来看Top 100学术期刊和出版社的…

深度解析 Raft 分布式一致性协议

本文参考转载至&#xff1a;浅谈 Raft 分布式一致性协议&#xff5c;图解 Raft - 白泽来了 - 博客园 (cnblogs.com) 深度解析 Raft 分布式一致性协议 - 掘金 (juejin.cn) raft-zh_cn/raft-zh_cn.md at master maemual/raft-zh_cn (github.com) 本篇文章将模拟一个KV数据读写服…

【漏洞复现】禅道——未授权登入(QVD-2024-15263)

声明&#xff1a;本文档或演示材料仅供教育和教学目的使用&#xff0c;任何个人或组织使用本文档中的信息进行非法活动&#xff0c;均与本文档的作者或发布者无关。 文章目录 漏洞描述漏洞复现测试工具 漏洞描述 禅道&#xff08;Zentao&#xff09;是一款开源的项目管理和协作…

死锁-活锁与活锁的预防、死锁与死锁的预防和检测(处理死锁的方式:事务等待图)

一、引言 1、死锁是因采用封锁技术实现并发控制而产生的一种运行事务被阻塞或等待的现象 2、如果利用严格两阶段封锁协议来解决我们前面提到的“更新丢失”这种数据不一致问题&#xff0c;非串行调度中的事务T1首先获得数据对象X上的读锁并开始执行&#xff0c;随后事务T2也获…

数值分析笔记(五)线性方程组解法

三角分解法 A的杜利特分解公式如下&#xff1a; u 1 j a 1 j ( j 1 , 2 , ⋯ , n ) , l i 1 a i 1 / u 11 ( i 2 , 3 , ⋯ , n ) , u k j a k j − ∑ m 1 k − 1 l b m u m j ⇒ a k j ( j k , k 1 , ⋯ , n ) , l i k ( a i k − ∑ m 1 k − 1 l i n u m k ) /…

uniapp 在手机上导出excel

1.创建excelDev.js文件 export default {exportExcel(fileData, documentName excel) {plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {let rootObj fs.rootlet fullPath rootObj.fullPathconsole.log("开始导出数据")// 创建文件夹rootObj…