当前位置: 首页 > 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安全之基础合规配置
  • python3.6+scrapy+mysql 爬虫实战
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • Facebook AccountKit 接入的坑点
  • GitUp, 你不可错过的秀外慧中的git工具
  • JS字符串转数字方法总结
  • PAT A1120
  • Vue官网教程学习过程中值得记录的一些事情
  • Yii源码解读-服务定位器(Service Locator)
  • 规范化安全开发 KOA 手脚架
  • 机器学习中为什么要做归一化normalization
  • 你不可错过的前端面试题(一)
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 怎么把视频里的音乐提取出来
  • Nginx实现动静分离
  • ​linux启动进程的方式
  • ​学习一下,什么是预包装食品?​
  • # include “ “ 和 # include < >两者的区别
  • # Java NIO(一)FileChannel
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #LLM入门|Prompt#3.3_存储_Memory
  • (1)Nginx简介和安装教程
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (七)Knockout 创建自定义绑定
  • (强烈推荐)移动端音视频从零到上手(上)
  • (转载)Linux网络编程入门
  • ./configure,make,make install的作用
  • .axf 转化 .bin文件 的方法
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 分布式技术比较
  • .stream().map与.stream().flatMap的使用
  • /etc/motd and /etc/issue
  • ??myeclipse+tomcat
  • @软考考生,这份软考高分攻略你须知道
  • [ C++ ] STL_stack(栈)queue(队列)使用及其重要接口模拟实现
  • [ C++ ] STL_vector -- 迭代器失效问题
  • [ vulhub漏洞复现篇 ] Hadoop-yarn-RPC 未授权访问漏洞复现
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——