LeetCode讲解篇之15. 三数之和

文章目录

  • 题目描述
  • 题解思路
  • 题解代码

题目描述

在这里插入图片描述

题解思路

这道题如果我们直接使用三层循环暴力搜索,时间复杂度是O(n3),大概率会超时

那还有更优解吗,答案是绝对的,查询搜索想要优化,就要思考如何进行排除法加速搜索过程。我们可以使用哈希表存储数组中所有的数字,然后我们只需要两层循环遍历哈希表,枚举所有的两个数字的组合,通过 0 - 两个数字之和得到另一个数字的大小,然后在哈希表中查看是否存在,若存在,则表明找到一个三元组,通过这种做法要注意最终得到的所有三元组需要去重,这个过程的时间复杂度是O(n2),空间复杂度是O(n)。

我们还能找到其它解法吗,答案是绝对的,我们可以先对数组进行排序,然后遍历数组,先固定三元组中的最小值,然后在剩余区间内使用相撞的双指针,如果找到的三数之和小于0右移左指针,若大于0则左移右指针,若过程中存在三数之和等于0的情况,则记录该三元组并结束对撞过程,这种做法注意需要对我们遍历到的最小值、左指针、右指针进行去重,避免产生重复的结果,该算法时间复杂度是O(n2),空间复杂度是使用的排序算法的空间复杂度

题解代码

func threeSum(nums []int) [][]int {// 数组排序sort.Ints(nums)// 结果集合ans := make([][]int, 0)for i := 0; i < len(nums) - 2; i++ {// 如果最小值小于零,则不可能在出现组成三元组的情况,进行剪枝if nums[i] > 0 {break}// 进行相撞的左右指针left, right := i + 1, len(nums) - 1// 如果左右指针未碰撞,进行相撞for left < right {// 三数之和sum := nums[i] + nums[left] + nums[right]if sum > 0 {// 小于0,表示三数之和大了,左移右指针right--} else if sum < 0 {// 小于0,表示三数之和小了,右移左指针left++} else {// 记录三元组ans = append(ans, []int{nums[i], nums[left], nums[right]})// 找寻下一个不重复的左指针,否则直至越界for left + 1 <= right && nums[left] == nums[left + 1] {left++}left++// 找寻下一个不重复的右指针,否则直至越界for right - 1 >= left && nums[right] == nums[right - 1] {right--}right--}}// 找寻下一个不重复的最小值,否则直至越界for i + 1 <= right && nums[i] == nums[i + 1] {i++}}return ans
}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

OIDC6-OIDC 授权流程类型

OpenID Connect&#xff08;OIDC&#xff09;支持三种主要的授权流程&#xff08;Authorization Flow&#xff09;&#xff0c;分别是授权码流程&#xff08;Authorization Code Flow&#xff09;、隐式流程&#xff08;Implicit Flow&#xff09;和混合流程&#xff08;Hybrid…

OpenCV视频I/O(6)检查视频捕获对象是否已成功打开的函数isOpened()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 如果视频捕获已经初始化&#xff0c;则返回 true。 如果之前调用 VideoCapture 构造函数或 VideoCapture::open() 成功&#xff0c;则该方法返回…

File systems

inode descriptor 文件系统中核心的数据结构就是inode和file descriptor。后者主要与用户进程进行交互。 inode&#xff0c;这是代表一个文件的对象&#xff0c;并且它不依赖于文件名。实际上&#xff0c;inode是通过自身的编号来进行区分的&#xff0c;这里的编号就是个整数…

游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程

一、前言 游戏厅计时器ps5计算时间的软件 佳易王电玩计时计费管理系统操作教程 软件为绿色免安装版&#xff0c;解压即可使用。 二、软件程序教程 计时的时候&#xff0c;点击 开始计时按钮 开台后可设置定时语音提醒的时间 时间设置好后&#xff0c;点击 开启提醒 即可 三、…

C++远端开发环境安装(centos7)

使用VMWare安装centos7 启用网卡设备 修改文件/etc/sysconfig/network-scripts/ifcfg-ens33中的ONBOOTyes 重启网络服务 systemctl restart network 配置yum仓库 直接将如下内容覆盖原有的/etc/yum.repos.d/CentOS-Base.repo文件 清理yum缓存 yum clean all 刷新yum y…

深度学习常见术语介绍

文章目录 数据集&#xff08;Dataset&#xff09;特征&#xff08;Feature&#xff09;标签&#xff08;Label&#xff09;训练集&#xff08;Training Set&#xff09;测试集&#xff08;Test Set&#xff09;验证集&#xff08;Validation Set&#xff09;模型&#xff08;Mo…

急!现在转大模型还来得及吗?零基础入门到精通,收藏这一篇就够了

大模型的出现&#xff0c;让行内和行外大多数人都感到非常焦虑。 行外很多人想了解却感到无从下手&#xff0c;行内很多人苦于没有硬件条件无法尝试。想转大模型方向&#xff0c;相关的招聘虽然层出不穷&#xff0c;但一般都要求有大模型经验。而更多的人&#xff0c;则一直处…

黑马程序员pink前端查漏补缺笔记,耗时6天,针对必要案例进行练习

HTML 1&#xff09;插件 自动闭合标签&#xff0c;修改开标签时闭标签跟着变&#xff08;微信开发者工具没有这个功能&#xff09; 主题 保存格式化 浏览器打开 实时刷新&#xff0c;不用按浏览器的刷新按钮 win←/→ 快速分屏 2&#xff09;初始结构标签 文档类型声明标签…

社交电商团购平台构建策略与用户体验设计思路

一、电商拼团系统开发思路 1、需求分析&#xff1a; 深入理解业务需求&#xff1a;与商家深入沟通&#xff0c;明确其业务目标和需求&#xff0c;包括拼团模式的具体要求&#xff08;如参与人数、时间限制、价格策略等&#xff09;、用户参与限制、商品管理、订单处理、支付流…

828华为云征文|部署敏捷项目管理系统工具 ZenTao

828华为云征文&#xff5c;部署敏捷项目管理系统工具 ZenTao 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 ZenTao3.1 ZenTao 介绍3.2 ZenTao 部署3.3 ZenTao 使用 四、总…

P1303 A*B Problem Python题解

A*B Problem 题目背景 高精度乘法模板题。 题目描述 给出两个非负整数&#xff0c;求它们的乘积。 输入格式 输入共两行&#xff0c;每行一个非负整数。 输出格式 输出一个非负整数表示乘积。 样例 #1 样例输入 #1 1 2样例输出 #1 2提示 每个非负整数不超过 1 0…

万字面试题大模型面试,最全八股和答案

自ChatGPT开启大模型时代以来&#xff0c;大模型正迎来飞速发展&#xff0c;现在从事大模型开发相关工作可谓是处在时代的风口。那么大模型面试需要哪些技能和技巧呢&#xff0c;本文详细整理了全套的面试问题及答案&#xff0c;希望对大家有所帮助&#xff01; 目录 大模型&a…

平衡二叉搜索树插入的实现

前言 因为二叉搜索树在插入的时候最坏的情况可能会变成一条单一链表&#xff0c;从而使查找或者插入的时候消耗大量的时间。所以为了解决这一情况诞生了平衡二叉搜索树&#xff0c;其作用是为了减少二叉搜索树的整体高度&#xff0c;从而使查找插入删除的效率提高。 一、平衡二…

Sublime Text4的下载安装以及汉化

sublime官网&#xff1a;https://www.sublimetext.com/ 按照指示一步步操作即可 汉化操作&#xff1a; 等一会就会弹出搜索框&#xff0c; 帮助菜单这里可以切换语言&#xff0c;

【C++报错已解决】std::bad_alloc

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

react项目中接入(集成)prettier

目的 让我们的代码不管经过多少人的改动&#xff0c;始终都会保持同样的编写格式&#xff0c;保证多人开发时&#xff0c;大家使用的按键格式都是一样的 prettier官网 安装 固定版本安装 --save-exact 记录该软件包的精确版本号(官方推荐的安装方式) npm i -D --save-exact…

常见组件详解(六):torch.nn.AvgPool2d()、torch.nn.AdaptiveAvgPool2d()

文章目录 一、torch.nn.AvgPool2d()&#xff1a;二维平均池化1.1参数介绍1.2代码案例 二、torch.nn.AdaptiveAvgPool2d()&#xff1a;自适应平均池化2.1参数介绍2.2代码案例2.3使用场景 一、torch.nn.AvgPool2d()&#xff1a;二维平均池化 1.1参数介绍 torch.nn.AvgPool2d( k…

第T2周:TensorFlow实现彩色图片分类(CIFAR10数据集),并实现自己的真实图片分类

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标&#xff1a; 加载CIFAR-10数据集进行训练&#xff0c;然后能够对彩色图片进行分类 具体实现&#xff1a; &#xff08;一&#xff09;环境&#xff1a; 语…

Python | Leetcode Python题解之第442题数组中重复的数据

题目&#xff1a; 题解&#xff1a; class Solution:def findDuplicates(self, nums: List[int]) -> List[int]:ans []for x in nums:x abs(x)if nums[x - 1] > 0:nums[x - 1] -nums[x - 1]else:ans.append(x)return ans

可以免费制作表情包的AI工具来了!

一直想自己制作一套表情包&#xff0c;但一直没有找到好用的工具&#xff0c;要么就是太麻烦&#xff0c;要么就是不免费。 今天AI表情包免费制作工具来了&#xff0c;手机就可以直接做表情包&#xff0c;非常方便。 先看效果~ 工具用到的是通义APP&#xff0c;可以在频道中找…