力扣精选算法100题——等于目标值的两个数or三数之和(双指针专题)

目录

🚩等于目标值的俩个数

第一步:了解题意

第二步:算法原理

第三步:代码实现

🚩三数之和

 第一步:了解题意

第二步:算法原理

思路:

❗不漏:

❗去重:

!优化

第三步:代码实现


🚩等于目标值的俩个数

 本题链接——等于目标值的俩个数

第一步:了解题意

其实很好理解:我们在一个数组里面找到2个数等于target值即可,如果存在多种结果都等于target,只需要返回一组即可。

第二步:算法原理

就拿示例1来分析:

3和15符合题意,15和3也符合,只要返回一组即可。

我们怎么找到呢?遇到找到之和等于目标值一般都是用双指针来。

但是这个左右双指针并不是同向的,而是一个left定义在最初的位置,一个right定义在最右边的位置。如果left+right的值等于目标值,则就返回该值,如果小于目标值那么left++,如果大于目标值那么right--,,直到left==right相遇即可结束,但是这些的前提是有序数列(升序)。

好吧,这一个样例很凑巧,直接等于目标值。


算法原理:sort排序[left+right] === target  return {[left],[right]}[left+right] < target   left++[left+right] > target   right--直到left==right相遇的时候就结束

这是我记录下来地一个笔记 :


第三步:代码实现

class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int left=0,right=price.size()-1;int sum=0;while(left<right){sum=price[left]+price[right];if(sum>target)right--;else if(sum<target) left++;else return {price[left],price[right]};}return {-1,-1};}
};

🚩三数之和

本题链接——三数之和

 第一步:了解题意

我们要找nums数组中三个数相等等于0即可,每个三元组都是不重复的,比如[-1,0,1]和[0,1,-1]是重复的,只能取一组。


第二步:算法原理

上一个题目是利用双指针给有序数组求解俩数之和,这题是求三数之和也一样可以用双指针,但是不同的是,三数,怎么用俩个指针来控制呢?

思路:

  • 1.先排序
  • 2.固定一个a
  • 3.在该数的后面区间内,利用“双指针”算法快速找到俩个数之和等于-a即可。

但是这一题并没有这么固定,我们需要处理2个小细节:

❗不漏:

就是如果找到了符合题意的,但是指针不能停,还得继续缩小区间,比如

❗去重:

大家可以理解去重其实也是一种优化,就是避开掉重复的运算。比如:

并且如果固定的a值,下一个固定的a值与原先的a值相等,也是可以跳过这次循环继续下下个固定a值。

!优化

我们首先都是要给有序数组排序的sort排成升序,那么固定的a值肯定是需要<=0的,不然如果a=0或者a>0,这个序列是升序,那么就代表着a后面的数据都是>0,那么肯定是不等相加等于0的。

所以只要满足a<=0即可。


第三步:代码实现

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> ret;//排序sort(nums.begin(),nums.end());//利用双指针解决问题for(int i=0;i<nums.size()&&nums[i]<=0;i++)//固定a{if(i>0)//看看固定的a值是不是和原先的相等,相等就跳过下个一个值固定{if(nums[i]==nums[i-1]) continue;}int left=i+1,right=nums.size()-1,a=nums[i];while(left<right){if(nums[left]+nums[right]<-a){left++;while(left<right&&nums[left]==nums[left-1]){left++;}}else if(nums[left]+nums[right]>-a){right--;while(left<right&&nums[right]==nums[right+1]){right--;}}else{ret.push_back({nums[i],nums[left],nums[right]});left++;while(left<right&&nums[left]==nums[left-1]){left++;}right--;while(left<right&&nums[right]==nums[right+1]){right--;}}}}return ret;}
};

 安静下来,慢慢地,一点一点地,与时间相遇。

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

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

相关文章

Simulink旧版本如何打开新版的模型文件

Simulink旧版本如何打开新版的模型文件 当用旧版本Simulink软件打开模型时会报错&#xff0c;是因为版本不兼容造成的 解决办法 在simulink的选项中去掉 do not load models created with newer version of Simulink

计算机视觉的应用

计算机视觉&#xff08;Computer Vision&#xff09;是一门研究如何让计算机能够理解和分析数字图像或视频的学科。简单来说&#xff0c;计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。为实现这个目标&#xff0c;计算机视觉结合了图像处理、机器学习、模…

分享用 vector的vector实现一个二维数组并初始化的逆置矩阵问题

题目名称 867.转置矩阵 目录 题目名称 867.转置矩阵 1.题目 2.题目分析 3.题目知识点 3.1vector的构造函数 3.2vector构造二维数组 最后&#x1f490; 推荐阅读顺序: 1.题目->2.题目分析->3.题目知识点 1.题目 如果矩阵 matrix为 m 行 n列&#xff0c;则转置后的矩…

【Python学习】Python学习15-模块

目录 【Python学习】Python学习15-模块 前言创建语法引入模块from…import 语句from…import* 语句搜索路径PYTHONPATH 变量-*- coding: UTF-8 -*-导入模块现在可以调用模块里包含的函数了PYTHONPATH 变量命名空间和作用域dir()函数globals() 和 locals() 函数reload() 函数Py…

Python中如何简化if...else...语句

一、引言 我们通常在Python中采用if...else..语句对结果进行判断&#xff0c;根据条件来返回不同的结果&#xff0c;如下面的例子。这段代码是一个简单的Python代码片段&#xff0c;让用户输入姓名并将其赋值给变量user_input。我们能不能把这几行代码进行简化&#xff0c;优化…

RocketMQ源码阅读-Message拉取与消费-Consumer篇

RocketMQ源码阅读-Message拉取与消费-Consumer篇 1. Consumer2. PushConsumer3. PushConsumer 订阅3.1 subscribe订阅3.2 registerMessageListener注册监听器 4. PushConsumer 消息队列Rebalance4.1 Rebalance流程4.2 Rebalance策略AllocateMessageQueueAveragelyAllocateMessa…

CSS 动态邮件查收效果

<template><view class="content"><view class="tooltip-container"><text class="tooltip">查看</text><text class="text">@</text></view></view> </template><sc…

Visual Studio调试模式下无法使用右键菜单将ppt转换到pdf

Visual Studio调试模式下无法使用右键菜单将ppt转换到pdf 症状 Visual Studio调试模式下&#xff0c;程序停在断点时&#xff0c;我临时需要将ppt转为pdf&#xff0c;遂右键单击文件&#xff0c;想直接转pdf&#xff0c;奈何光标转了几秒钟&#xff0c;毫无反应。 解决方法 …

智慧校园云桌面解决方案简述

近年来,随着面向21世纪教育振兴行动计划、校校通、农远工程、教师网联等一系列重大工程的部署和实施,我国教育信息化进入快速发展时期,取得了显著成绩,主要体现在如下方面:一是教育信息化基础设施建设有了较快发展,初步形成了“天地合一”的教育信息网络;二是数字教育资…

计算机基础专升本笔记九-Windows7基础(一)Windows 7 介绍

计算机基础专升本笔记九-Windows7基础 一、Windows简介 Microsoft公司从1983年开始研制Windows系统&#xff0c;最初的研制目标是在MS-DOS的基础上提供一个多任务的图形用户界面。   1985年&#xff0c;第一个版本的Windows 1.0问世&#xff0c;它是一个具有图形用户界面的系…

未来科技五年人工智能行业产业发展趋势最新竞争力

人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是近年来快速发展的热门领域&#xff0c;被广泛应用于各个行业。随着技术的不断创新和突破&#xff0c;人工智能行业的竞争力也在不断提升。本文将分析未来科技五年人工智能行业产业发展趋势&#xff0c…

MySQL经典习题与解法Num01

题目&#xff1a;获取每个部门中当前员工薪水最高的相关信息 描述&#xff1a; 有一个员工表dept_emp简况如下: emp_nodept_nofrom_dateto_date10001d0011986-06-269999-01-0110002d0011996-08-039999-01-0110003d0021996-08-039999-01-01 有一个薪水表salaries简况如下: …

openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表

文章目录 openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表概述如何找到算法名称字符串列表?openssl-3.2.0\providers\implementations\include\prov\names.h备注END openssl3.2 - EVP_CIPHER_fetch算法名称字符串(参数2)的有效值列表 概述 进行加解密时, 先…

力扣精选算法100题——水果成篮(滑动窗口专题)

本题链接&#x1f449;水果成篮 第一步&#xff1a;了解题意 我就按照实例1来进行对这题的理解。 1代表种类类型&#xff0c;这个数组里面有2个种类类型 ps:种类1和种类2 &#xff0c;只不过种类1是有2个水果&#xff0c;种类2有一个水果&#xff0c;共计3个水果。 本题需要解…

设计模式复盘

一、背景 在项目中&#xff0c;对于单据的扩展是基于类似于接口扩展实现的。从业务横行来看&#xff0c;业务有A、B、C&#xff1b;从纵向来看&#xff0c;单个业务逻辑编排也可以划分为基础数据查询&#xff0c;决策判断&#xff0c;逻辑执行三大块。 单据扩展&#xff1a;平…

如何区分GPT-3.5模型与GPT-4模型?

GPT 3.5 和 GPT-4 有什么区别&#xff1f; GPT-3.5 在经过大量数据训练后&#xff0c;成功地发展到可以考虑 1750 亿个参数以响应提示。这使其具备令人印象深刻的语言技能&#xff0c;以非常人性化的方式回应各种查询。然而&#xff0c;GPT-4 在更为庞大的训练数据基础上进行了…

腐烂的橘子 -- DFS、BFS

994. 腐烂的橘子 class OrangesRotting:"""994. 腐烂的橘子https://leetcode.cn/problems/rotting-oranges/description/"""def solution(self, grid: List[List[int]]) -> int:"""BFS时间复杂度 O(M*N)空间复杂度 O(M*N):par…

Vue keep-alive的使用和原理解析

✨ 专栏介绍 在当今Web开发领域中&#xff0c;构建交互性强、可复用且易于维护的用户界面是至关重要的。而Vue.js作为一款现代化且流行的JavaScript框架&#xff0c;正是为了满足这些需求而诞生。它采用了MVVM架构模式&#xff0c;并通过数据驱动和组件化的方式&#xff0c;使…

linux建立基本网站

网站需求&#xff1a; 1.基于域名[www.openlab.com]可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息&#xff0c;教学资料和缴费网站&#xff0c;基于[www.openlab.com/student] 网站访问学生信息 [www.openlab.com/data]网站访问教学资…

使用@JsonSerialize注解处理单位换算以及数据默认值

一、需求 使用JsonSerialize&#xff0c;来解决单位换算&#xff0c;以及数据为空时返回“**”默认值问题。例如有时候我们需要将金额&#xff0c;以万元的形式返回&#xff0c;需要千分位等等。 注意&#xff1a;如果使用fastjson进行序列化&#xff0c;则本注解不会生效。此…