当前位置: 首页 > 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
}

:::

相关文章:

  • Spring第三课,Lombok工具包下载,对应图书管理系统列表和登录界面的后端代码,分层思想
  • Git修改远程仓库名称
  • element中el-table表头通过header-row-style设置样式
  • TCP_报文格式解读
  • esp32-s3部署yolox_nano进行目标检测
  • STM32-SPI 中断
  • 【自用】ASCii 8*16 点阵字模
  • 2023亚太地区五岳杯量子计算挑战赛
  • Vue在Computed计算属性下,获取Promise then的返回值无效为空
  • 限流、熔断、降级、线程池隔离
  • 【数电笔记】11-最小项(逻辑函数的表示方法及其转换)
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • 一篇文章带你详细了解C++智能指针
  • 2023年第十二届数学建模国际赛小美赛C题雪崩防范求解分析
  • Mysql安全之基础合规配置
  • 网络传输文件的问题
  • 「面试题」如何实现一个圣杯布局?
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 0x05 Python数据分析,Anaconda八斩刀
  • Android交互
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript设计模式系列一:工厂模式
  • JS变量作用域
  • laravel5.5 视图共享数据
  • QQ浏览器x5内核的兼容性问题
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • vue 配置sass、scss全局变量
  • 阿里云购买磁盘后挂载
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 蓝海存储开关机注意事项总结
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前端技术周刊 2019-01-14:客户端存储
  • 前端技术周刊 2019-02-11 Serverless
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 通过几道题目学习二叉搜索树
  • 微信小程序填坑清单
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 智能网联汽车信息安全
  • 最近的计划
  • ​决定德拉瓦州地区版图的关键历史事件
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (11)MSP430F5529 定时器B
  • (C#)一个最简单的链表类
  • (vue)页面文件上传获取:action地址
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .mysql secret在哪_MySQL如何使用索引