当前位置: 首页 > news >正文

[leetcode 双指针]

1. 三数之和 M

:::details

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

示例 1:

输入:nums = [-1,0,1,2,-1,-4]
输出:[[-1,-1,2],[-1,0,1]]
示例 2:

输入:nums = []
输出:[]
示例 3:

输入:nums = [0]
输出:[]

提示:

0 <= nums.length <= 3000
-105 <= nums[i] <= 105

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

因为题目要求输出的是value而不是index,所以为了简单起见,我们上来先来一个排序

然后利用双指针,两头往中间靠

注意去重

package mainimport ("fmt""sort"
)func threeSum(nums []int) [][]int {sort.Ints(nums)// fmt.Println(nums)res := [][]int{}n := len(nums)for i := 0; i < n-2; i++ {l, r := i+1, n-1if nums[i] > 0 {break}if i > 0 && nums[i] == nums[i-1] {// 去重continue}for l < r {in, ln, rn := nums[i], nums[l], nums[r]if in+ln+rn == 0 {res = append(res, []int{in, ln, rn})for l < r && nums[l] == ln {l++}for l < r && nums[r] == rn {r--}} else if in+ln+rn < 0 {l++} else {r--}}}return res
}func main() {nums := []int{-1, 0, 1, 2, -1, -4}fmt.Println(threeSum(nums))
}

:::

2. 四数之和 M

:::details

给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复):

0 <= a, b, c, d < n
a、b、c 和 d 互不相同
nums[a] + nums[b] + nums[c] + nums[d] == target
你可以按 任意顺序 返回答案 。

示例 1:

输入:nums = [1,0,-1,0,-2,2], target = 0
输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]
示例 2:

输入:nums = [2,2,2,2,2], target = 8
输出:[[2,2,2,2]]

提示:

1 <= nums.length <= 200
-109 <= nums[i] <= 109
-109 <= target <= 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/4sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。


func fourSum(nums []int, target int) [][]int {sort.Ints(nums)// fmt.Println(nums)n := len(nums)res := [][]int{}for i := 0; i < n-3; i++ {/*** 因为target可以是负数,所以不能这么剪枝* 例如 [-5,-4,-3,-2,1,5,4,2] target = -14*/// if nums[i] > target {// 	break// }// 去重 [a,a,x,y]if i > 0 && nums[i] == nums[i-1] {continue}for j := i + 1; j < n-2; j++ {in, jn := nums[i], nums[j]twoSum := in + jnif j > i+1 && nums[j] == nums[j-1] {continue}l, r := j+1, n-1for l < r {ln, rn := nums[l], nums[r]temp := twoSum + ln + rnif temp == target {res = append(res, []int{in, jn, ln, rn})// 去重for l < r && nums[l] == ln {l++}for l < r && nums[r] == rn {r--}} else if temp < target {for l < r && nums[l] == ln {l++}} else {for l < r && nums[r] == rn {r--}}}}}return res
}

:::

相关文章:

[leetcode 双指针]

1. 三数之和 M :::details 给你一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;请你找出所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例…...

Notepad++批量添加引号

工作中经常会遇到这样情景&#xff1a;业务给到一批订单号&#xff0c;需要查询这批订单的某些字段信息。在where条件中需要传入这些订单号的数组&#xff0c;并且订单号用引号引起&#xff0c;用引号隔开。 字符串之间长度相同 可以按住CtrlAlt和鼠标左键选中区域&#xff0…...

HarmonyOS4.0从零开始的开发教程04 初识ArkTS开发语言(下)

HarmonyOS&#xff08;二&#xff09; 初识ArkTS开发语言&#xff08;下&#xff09;之TypeScript入门 声明式UI基本概念 应用界面是由一个个页面组成&#xff0c;ArkTS是由ArkUI框架提供&#xff0c;用于以声明式开发范式开发界面的语言。 声明式UI构建页面的过程&#xff…...

Failed to connect to github.com port 443 after 21055 ms: Timed out

目前自己使用了梯*子还是会报这样的错误&#xff0c;连接不到的github。 查了一下原因&#xff1a; 是因为这个请求没有走代理。 解决方案&#xff1a; 设置 -> 网络和Internet -> 代理 -> 编辑 记住这个IP和端口 使用以下命令&#xff1a; git config --global h…...

Python小技巧:冻结参数,让你的代码变简洁

Python 有一些非常使用的模块&#xff0c; functools 就是其中之一。今天我们来说说其中的 partial 函数&#xff0c; partial 函数看起来平平无奇&#xff0c;如果你经常翻看高手们写的库&#xff0c;会发现很多地方都在使用这函数。 入门 我们从一个小场景开始。 现在我们需…...

如何判断电脑电源质量的好坏?

电脑电源作为电脑的关键部件直接影响到电脑的性能和寿命&#xff0c;因此选择一个好的电源至关重要。那么要如何判断电脑电源的好坏呢?判断的指标都有哪些呢? 1.外观检测 观察电源外观可以初步判断电脑电源的工艺质量和材料质量。外观检测需要检查电源外壳是否坚固&#xff0…...

装饰器基础知识

一、概述 装饰器是可调用的对象&#xff0c;其参数是另一个函数&#xff08;被装饰的函数&#xff09;。装饰器可能会处理被装饰的函数&#xff0c;然后把它返回&#xff0c;或者将其替换成另一个函数或可调用对象。 装饰器的一大特性是&#xff0c;能把被装饰的函数替换成其他…...

轻量封装WebGPU渲染系统示例<42>- vsm阴影实现过程(源码)

前向实时渲染vsm阴影实现的主要步骤: 1. 编码深度数据&#xff0c;存到一个rtt中。 2. 纵向和横向执行遮挡信息blur filter sampling, 存到对应的rtt中。 3. 将上一步的结果(rtt)应用到可接收阴影的材质中。 具体代码情况文章最后附上的实现源码。 当前示例源码github地址: …...

[Electron] 将应用日志文件输出

​ 日志文件输出可以使用 electron-log 模块。 electron-log 是一个用于 Electron 应用程序的日志记录库。它提供了一种简单且方便的方式来在 Electron 应用中记录日志信息&#xff0c;并支持将日志输出到文件、控制台和其他自定义目标。 以下是 electron-log 的一些主要特点…...

特性【C#】

C#特性是一种用于在编译时向程序元素添加声明性信息的语言结构。 下面是C#特性的使用方法&#xff1a; 1.使用系统提供的特性&#xff1a; 可以使用系统提供的特性来标记类、方法、属性等&#xff0c;以便在编译时进行验证或者提供其他信息。例如&#xff0c;可以使用Obsole…...

理解SpringIOC和DI第一课(Spring的特点),IOC对应五大注解,ApplicationContext vs BeanFactory

Spring是一个包含众多工具等Ioc容器 对象这个词在Spring范围内&#xff0c;称为bean Spring两大核心思想 1.IOC (IOC是控制反转&#xff0c;意思是控制权反转-控制权&#xff08;正常是谁用这个对象&#xff0c;谁去创建&#xff0c;&#xff09;-控制对象的控制权&#xf…...

【微服务】分布式限流如何实现

Sentinel 是一款阿里巴巴开源的分布式系统级流量控制组件&#xff0c;它提供了流量的自适应控制、熔断降级、系统负载保护等功能。下面是使用 Sentinel 实现分布式限流方案的基本步骤&#xff1a; 引入 Sentinel 依赖&#xff1a;首先在你的 Java 项目中引入 Sentinel 的相关依…...

【S32K3环境搭建】-0.3-S32DS安装实时驱动RTD(Real-Time Driver)

目录 1 什么是“实时驱动RTD(Real-Time Driver)” 2 安装“实时驱动RTD(Real-Time Driver)” 2.1 方法一&#xff1a;通过S32DS Extensions and Updates安装“实时驱动RTD(Real-Time Driver)” 2.2 方法二&#xff1a;通过Install New Software…安装“实时驱动RTD(Real-Ti…...

软件设计之适配器模式

类模式 我们知道插座的电压为交流电220V&#xff0c;而日常电器使用的是直流电且电压会较小&#xff0c;比如手机充电会通过插头适配器达到额定的输入电流。下面我们实现这个案例&#xff1a;将220V电压转化为5V的电压。 package Adapter.Class;public class Adapter extends …...

虚拟化逻辑架构:OVS 交换机与端口管理

目录 一、实验 1.OVS 交换机管理 2.OVS端口管理 二、问题 1.KVM下的br0和virbr0有何区别 2.OVS 虚拟交换机 与接口如何实现关联的创建和删除 3.两个ovs之间如何进行流量交互 4.虚拟网络如何和物理网络互联 一、实验 1.OVS 交换机管理 &#xff08;1&#xff09;查看网…...

【springboot】idea项目启动端口被占用

问题 idea本地启动springboot项目端口老是被占用 解决 关闭被占用的端口进程 步骤: 1. winR打开程序框 2. 查出被占用端口的进程id netstat -ano | finderstr 端口号 例如 netstat -ano | finderstr 81013.杀死进程 taskkill /pid 进程id -t -f 例如 taskkill /pid 2…...

linux环境下编译安装OpenCV For Java(CentOS 7)

最近在业余时间学习了一些有关图像处理的代码&#xff0c;但是只能本地处理&#xff0c;满足不了将来开放远程服务的需求。 因此&#xff0c;查找并参考了一些资料&#xff0c;成功在centos7环境安装上了opencv 460。 下面上具体安装步骤&#xff0c;希望能帮到有需要的同学。 …...

健康学习到 150 岁:人体系统调优不完全指南 | 开源日报 No.93

jesseduffield/lazygit Stars: 40.0k License: MIT lazygit&#xff0c;一个用 Go 语言编写的简单终端UI工具&#xff0c;可以执行 Git 命令。 该项目旨在让使用者更加方便地使用 Git&#xff0c;并提供了以下功能&#xff1a; 可视化操作&#xff1a;用户可以通过图形界面进…...

C++ Easyx 三子棋

目录 思路 框架​编辑 读取操作 数据操作 绘制画面 游戏的数据结构 用二维数组来模拟棋盘格 赢的情况 平局情况 Code 代码细节部分 &#xff08;1&#xff09;初始化棋盘格 &#xff08;2&#xff09; 初始化棋子类型​编辑 事件处理部分 落子 框架内代码的完善 数据处…...

[NAND Flash 2.1] NAND Flash 闪存改变了现代生活

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< ​ 1989年NAND闪存面世了&#xff0c;它曾经且正在改变了我们的日常生活。 NAND 闪存发明之所以伟大&#xff0c;是因为&#xff0c…...

FastAPI分块上传存储:对象存储集成完整指南

FastAPI分块上传存储&#xff1a;对象存储集成完整指南 【免费下载链接】fastapi FastAPI framework, high performance, easy to learn, fast to code, ready for production 项目地址: https://gitcode.com/GitHub_Trending/fa/fastapi 想要在FastAPI应用中实现大文件…...

OpenClaw智能邮件处理:Qwen3-32B镜像自动分类与优先级标记

OpenClaw智能邮件处理&#xff1a;Qwen3-32B镜像自动分类与优先级标记 1. 为什么需要自动化邮件处理 每天打开邮箱看到堆积如山的未读邮件&#xff0c;这种焦虑感我深有体会。作为技术团队的负责人&#xff0c;我的邮箱常年保持200未读状态——直到上个月用OpenClawQwen3-32B…...

Mac Mouse Fix革命性指南:让普通鼠标在Mac上实现专业级操作体验

Mac Mouse Fix革命性指南&#xff1a;让普通鼠标在Mac上实现专业级操作体验 【免费下载链接】mac-mouse-fix Mac Mouse Fix - A simple way to make your mouse better. 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix Mac Mouse Fix是一款专为Mac用户…...

分块技术全解析:长上下文没有杀死它,反而让它成了 RAG 的核心命门

随着 GPT-4o、Claude 3.7 等大模型将上下文窗口推至百万 Token 级别&#xff0c;行业里出现了一种极具误导性的声音&#xff1a;“长上下文已经让文本分块&#xff08;Chunking&#xff09;技术彻底过时了”。但现实恰恰相反&#xff0c;长上下文不仅没有淘汰分块&#xff0c;反…...

3分钟掌握Magika:AI驱动的文件类型检测终极指南

3分钟掌握Magika&#xff1a;AI驱动的文件类型检测终极指南 【免费下载链接】magika 项目地址: https://gitcode.com/GitHub_Trending/ma/magika Magika是一款基于深度学习的智能文件类型检测工具&#xff0c;由Google开源&#xff0c;能够快速准确地识别各种文件的内容…...

LM2596 DC-DC开关电源芯片的实战应用与优化设计

1. LM2596芯片基础与工作原理 LM2596这颗DC-DC降压芯片可以说是电子工程师的老朋友了&#xff0c;从工业设备到消费电子产品都能见到它的身影。我第一次用它是在大学做智能车项目时&#xff0c;需要把12V电池电压降到5V给单片机供电。当时对比了几款芯片后选择了LM2596&#xf…...

3步解锁全显卡AI超分:让老旧设备焕发新生的开源黑科技

3步解锁全显卡AI超分&#xff1a;让老旧设备焕发新生的开源黑科技 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler AI超分辨率技术正…...

Python实战:出租车计费模拟器开发(附完整代码与测试用例)

Python实战&#xff1a;出租车计费模拟器开发&#xff08;附完整代码与测试用例&#xff09; 出租车计费系统是城市交通中不可或缺的一部分&#xff0c;而用Python模拟这一过程不仅能帮助初学者理解条件分支和输入输出处理&#xff0c;还能培养将现实问题转化为代码的思维能力。…...

AI Agent操作系统架构师:Harness Engineer解析

Harness Engineer&#xff1a;AI Agent时代的「系统架构师」&#xff0c;打造可执行可信赖的智能体操作系统引言 当大语言模型从「对话助手」进化为「能干活的AI Agent」&#xff0c;我们发现一个核心矛盾&#xff1a;模型的概率性灵活能力与业务的确定性执行要求始终无法调和。…...

24小时运行不中断:OpenClaw+GLM-4.7-Flash构建个人资讯聚合器

24小时运行不中断&#xff1a;OpenClawGLM-4.7-Flash构建个人资讯聚合器 1. 为什么需要个人资讯聚合器 每天早上打开手机&#xff0c;总会被各种新闻推送淹没。财经、科技、行业动态...信息过载已经成为现代人的通病。作为一个技术从业者&#xff0c;我发现自己花费在筛选有效…...