【LeetCode最详尽解答】15-三数之和 3sum

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家!

链接:

  • 15-三数之和

直觉

示例:

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

输出: [[-1, -1, 2], [-1, 0, 1]]

解释:

nums[0] + nums[1] + nums[2] = (-1) + 0 + 1 = 0。

nums[1] + nums[2] + nums[4] = 0 + 1 + (-1) = 0。

nums[0] + nums[3] + nums[4] = (-1) + 2 + (-1) = 0。

不同的三元组是 [-1, 0, 1][-1, -1, 2]

注意输出的顺序和三元组的顺序无关。

首先,我们应该记住,解决方案集不得包含重复的三元组。考虑这个示例 [-3, 3, 4, -3, 1, 2],我们需要找到 _+_+_ = 0。如果我们先看索引 0,那么它将填充 -3(索引[0]) + 1 + 2 = 0。但是,当我们到达索引 3 时,它仍然具有相同的组合,即 -3(索引[3]) + 1 + 2 = 0。这就是重复的。因此,我们可以首先对数组进行排序来处理它。在这种情况下,它将排序为 [-3, -3, 1, 2, 3, 4],当我们遇到第二个 -3 时,我们可以跳过它。

对于 _+_+_ = 0,当我们选择第一个元素时,我们需要在剩余排序数组中找到两个元素,它们的和等于负的第一个元素值。然后它转换为一个两数之和的问题,类似于问题 167-两数之和 II-输入数组已排序,即在排序数组中找到两个数的和。在此示例中,排序后的数组将变为 [-4, -1, -1, 0, 1, 2],我们应该遍历整个数组,找到 -4 + [-1, -1, 0, 1, 2] = 0,然后 -1 + [-1, 0, 1, 2] = 0,然后跳过第二个 -1,然后 0 + [1, 2] = 0,等等。

当我们遍历整个数组时,我们还应该添加一些基本情况。如果 nums[i] > 0,那么我们中断,因为数组是递增顺序的。如果 nums[i] == nums[i-1],我们应该继续循环,因为如果我们不进行此操作,答案将重复。考虑 [-1, -1, 0, 1, 2]。对于第一个 -1,它将有 [-1, -1, 2][-1, 0, 1]。对于第二个 -1,它也将有 [-1, 0, 1],这会重复答案。因为第一个 -1 的剩余数组包含了第二个 -1 的剩余数组。

然后我们可以处理这个问题。让两个指针指向剩余数组的开始和结束位置:左指针为 i + 1,右指针为数组的末尾位置。如果这三个值小于 0,那么将 l 向右移动。如果这三个值大于 0,那么将 r 向左移动。否则,我们可以将这三个值追加到结果中。之后,我们应该增加左指针并减少右指针,因为数组不仅包含一个解决方案。然而,为了避免重复的解决方案,我们还需要做一个额外的步骤。考虑 -1[0, 0, 0, 1, 1]。如果 left+1,我们移动到第二个 0 和第一个 1。那么,因为第二个 0 与第一个 0 是相同的值,我们不能将其视为额外的解决方案。我们应该继续将左指针向右移动且不超过右指针。最后,左指针将位于第一个 1,与右指针在同一位置,它将不会进入 while l < r 循环,结果不会追加它。

方法

  1. 对数组进行排序。
  2. 遍历排序后的数组,对于每个索引,将剩余元素转换为两数之和问题。
  3. 通过在处理两数之和问题时检查 nums[l] == nums[l-1],以及在选择基值时检查 nums[i] == nums[i-1] 来避免重复的解决方案。
  4. 最后,返回结果。

复杂度

  • 时间复杂度:
    O ( n 2 ) O(n^2) O(n2)
    • 对数组进行排序需要 O ( n log ⁡ n ) O(n \log n) O(nlogn),并且在循环中使用双指针方法需要 O ( n 2 ) O(n^2) O(n2)

复杂度

  • 时间复杂度:
    O ( n 2 ) O(n^2) O(n2)

    • 对数组进行排序需要 O ( n log ⁡ n ) O(n \log n) O(nlogn),并且在循环中使用双指针方法需要 O ( n 2 ) O(n^2) O(n2),因此总体时间复杂度为 O ( n 2 ) O(n^2) O(n2)
  • 空间复杂度:
    O ( n ) O(n) O(n)

    • 如果不考虑用于存储输出的空间,空间复杂度为 O ( 1 ) O(1) O(1)。排序是就地完成的,只使用常量量的额外空间。

代码

class Solution(object):
    def threeSum(self, nums):
        """
        :type nums: List[int]
        :rtype: List[List[int]]
        """
        nums.sort()
        result = []
        for i in range(len(nums)):
            if nums[i] > 0:
                break
            if i > 0 and nums[i] == nums[i-1]:
                continue
            l = i+1
            r = len(nums) - 1
            while l < r:
                if nums[i] + nums[l] + nums[r] < 0:
                    l+=1
                elif nums[i] + nums[l] + nums[r] > 0:
                    r-=1
                else:
                    result.append([nums[i], nums[l], nums[r]])
                    l+=1
                    r-=1
                    while nums[l] == nums[l-1] and l < r:
                        l+=1
        return result

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DDPM公式推导(三)

2 Background 扩散模型【53】是一种以 p θ ( x 0 ) : ∫ p θ ( x 0 : T ) d x 1 : T p_\theta\left(\mathbf{x}_0\right):\int p_\theta\left(\mathbf{x}_{0: T}\right) d \mathbf{x}_{1: T} pθ​(x0​):∫pθ​(x0:T​)dx1:T​ 形式的潜在变量模型&#xff0c;其中 x 1…

机器真的能思考、学习和智能地行动吗?

In this post, were going to define what machine learning is and how computers think and learn. Were also going to look at some history relevant to the development of the intelligent machine. 在这篇文章中&#xff0c;我们将定义机器学习是什么&#xff0c;以及…

BerkeleyDB练习

代码; #include <db.h> #include <stdio.h>int main() {DB *dbp;db_create(&dbp, NULL, 0);printf("Berkeley DB version: %s\n", db_version(NULL, NULL, NULL));dbp->close(dbp, 0);return 0; } 编译运行

Android studio在Ubuntu桌面上 创建桌面图标,以及导航栏图标

Android studio在Ubuntu桌面上 创建桌面图标&#xff0c;以及导航栏图标 1. 下载Android studio for Lunux 免安装版本之后&#xff0c;解压 2. 通过控制台运行 ~/Documents/android-studio-2024.1.1.2-linux/android-studio/bin$ ./studio.sh 3. 选择菜单&#xff0c;Tools…

1586. 扫地机器人

问题描述 Mike同学在为扫地机器人设计一个在矩形区域中行走的算法,Mike是这样设计的:先把机器人放在出发点 (1,1)(1,1) 点上,机器人在每个点上都会沿用如下的规则来判断下一个该去的点是哪里。规则:优先向右,如果向右不能走(比如:右侧出了矩形或者右侧扫过了)则尝试向…

基于51单片机的烟雾报警器设计-ADC0809

一.硬件方案 火灾报警器采用51单片机为核心控制器&#xff0c;利用气体传感器MQ-2、ADC0809模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片&#xff0c;当环境中可燃气体浓度或温度等发生变化时系统会发出相应的灯光报警信号和声音报警信号&#xff0c;以…

28.启动与暂停程序

上一个内容&#xff1a;27.设计注入功能界面 以它 27.设计注入功能界面 的代码为基础进行修改 点击添加游戏按钮之后就把游戏启动了 CWndINJ.cpp文件中修改&#xff1a; void CWndINJ::OnBnClickedButton1() {// TODO: 在此添加控件通知处理程序代码/*ExeLst.InsertItem(0, L…

Vue I18n国际化插件

Vue I18n国际化插件 安装目录结构及文件内容./locales/lang/zh.js./locales/lang/en.js./locales/index.js main.js引入页面具体使用及语言切换&#xff08;Vue3&#xff09;刷新保存原语言&#xff0c;App.vue添加路由守卫注意点 中文文档&#xff1a; https://kazupon.githu…

69. UE5 RPG 使用Gameplay Cue 实现技能表现效果

在上一章中&#xff0c;我们实现了敌人的攻击技能的特效和音效。如果我们在多人模式下打开&#xff0c;发现&#xff0c;其它客户端看不到对应的效果。 造成这种问题的原因是因为敌人的技能是运行在服务器端的&#xff0c;它只复制到拥有它的客户端&#xff0c;而敌人的效果对于…

英伟达与斯坦福携手,打造未来全息XR眼镜:头带时代的终结

在XR(扩展现实)技术的演进过程中,一个显著的挑战在于如何平衡设备的便携性与视觉体验。传统的XR设备由于需要厚重的头带固定光学器件和显示器,不仅增加了体积,还为用户带来了社交上的不便。然而,随着英伟达与斯坦福大学戈登韦茨斯坦教授领导的研究团队的合作,这一难题似…

meilisearch的分页

Elasticsearch 做为老牌搜索引擎&#xff0c;功能基本满足&#xff0c;但复杂&#xff0c;重量级&#xff0c;适合大数据量。 MeiliSearch 设计目标针对数据在 500GB 左右的搜索需求&#xff0c;极快&#xff0c;单文件&#xff0c;超轻量。 所以&#xff0c;对于中小型项目来说…

探地雷达正演模拟,基于时域有限差分方法,四

突然发现第三章后半部分已经讲了使用接收记录成像的问题&#xff0c;所以这一章只讲解简单的数据分析。 &#xff08;均以宽角法数据为例子&#xff0c;剖面法数据处理方式都是相同的&#xff09;假设&#xff0c;我们现在已经获得了一个GPR记录&#xff0c;可以是常用的.sgy格…

DAY03 HTML

文章目录 一 表格1. 表格的语法2. 表格的可选标记3. 不规则的单元格&#xff08;合并单元格&#xff09;4. 表格的属性5. 表格的大小 二 列表1. 有序列表2. 无序列表3. 属性4. 列表的嵌套5. 定义列表【了解】 三 表单(重点)1. 表单的语法2. 表单的控件分类3. input元素4. selec…

为什么说Python 是胶水语言?

​ "Python 是胶水语言"这一说法是指它很擅长将不同的程序或代码库连接在一起&#xff0c;能够让来自不同编程语言或框架的组件无缝协作。Python 具有丰富的库和简单的语法&#xff0c;使得它可以轻松调用其他语言编写的程序或使用不同技术栈的模块。 ​ 以下是几个…

如何区分人工智能生成的图像与真实照片(下)

4 功能上的不合理性 AI 生成的图像往往会因为缺乏对现实世界物体结构和相互作用的了解&#xff0c;而产生各种功能不合理之处。这些不合理之处主要表现在以下几个方面&#xff1a; 4.1 构图不合理 物体关系不合逻辑: AI 生成的图像中&#xff0c;物体和人物之间的关系可能不符…

哈希表、递归在二叉树中的应用-1372. 二叉树中的最长交错路径

题目链接及描述 1372. 二叉树中的最长交错路径 - 力扣&#xff08;LeetCode&#xff09; 题目分析 题目所述&#xff0c;计算在二叉树中交替遍历的最大深度【左->右->左】【右->左->右】&#xff0c;例如对于从当前根节点root出发&#xff0c;则此时遍历方向有两个…

持续集成jenkins+gitee

首先要完成gitee部署&#xff0c;详见自动化测试git的使用-CSDN博客 接下来讲如何从git上自动拉取代码&#xff0c;实现jenkins无人值守&#xff0c;定时执行测试&#xff0c;生成测试报告。 需要这三个安装包 由于目前的jenkins需要至少java11到java17的版本&#xff0c;所以…

JavaScript——初识:JavaScript的组成、输入和输出语句... | JavaScript基础:变量,数据类型转换

目录 初识JavaScript JavaScript的组成 输入和输出语句 ECMAScript 6保留关键字 变量的命名规范 注意事项 JavaScript基础 变量的数据类型 数据类型分类 数据类型转换 转换为字符串型 转换为数字型 转换为布尔型 例题 初识JavaScript JavaScript的组成 Java…

搭建自己的AI模型应用网站:JavaScript + Flask-Python + ONNX

1. 前言 本文作者以一个前端新手视角&#xff0c;部署自己的神经网络模型作为后端&#xff0c;搭建自己的网站实现应用的实战经历。目前实现的网页应用有&#xff1a; AI 语音服务主页AI 语音识别AI 语音合成AI CP号码生成器 欢迎大家试用感受&#xff0c;本文将以博客基于G…

大数据—“西游记“全集文本数据挖掘分析实战教程

项目背景介绍 四大名著&#xff0c;又称四大小说&#xff0c;是汉语文学中经典作品。这四部著作历久不衰&#xff0c;其中的故事、场景&#xff0c;已经深深地影响了国人的思想观念、价值取向。四部著作都有很高的艺术水平&#xff0c;细致的刻画和所蕴含的思想都为历代读者所…