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

Leetcode15. 三数之和(HOT100)

链接

一般这种三数之和,四数之和都使用双指针,复杂度最优,次一级可使用哈希表。前者要求有序,后者空间上有花费。

题目:

题目要求答案中不能出现重复vector,比如{-1 1 0}和{-1 0 1};

这两个在固定住i 指向0位置,然后在后续子数组中查找合适的j 和k 时,会出现重复,所以我们对数组排序,通过if语句解决重复问题。

我们要找nums[i]+num[j]+nums[k]==0,乍一看,需要三个指针,三种循环来判断,但这显然是不合适的,于是我们固定住i(也就是让i从开头遍历到结尾即可),然后让j 从i 后面开始,k从最后一个元素开始往中间遍历。

如果刚开始(也就是图中这个位置),三个相加都小于0,那么就不存在答案,因为我们的数组是有序的,k越往做,越小了。

所以,我们只需要找三个相加大于等于0的,这样越往前越有可能找到==0的情况。

为什么要一直往前呢?万一出现下图这样,k指向的值刚好就可以和nums[i] nums[j]相加为0,为何还要往前?

因为我们怕重复,{-2 0 2},{-2 0 2},{-2 0 2},{-2 0 2}...........这不符合题目要求,所以我们尽量往左走,只留一个就行了。

另外,代码中其实还有可以优化的地方:

也就是这两点,因为排序后,并不能去重,所以会出现:

i指向这两个位置,找到的答案还是会重复,所以我们在i 至少找过一次(也就是i!=0即 i)时,且nums[i]==nums[i-1]时,continue住,不要往下循环了,别找了,答案如果有都是一样的,没必要循环了。

还有j 的情况也是如此:j>i+1也就是j 在当前i 这个位置至少已经找过一次了,如果j 往后挪了还是相等,那也不用找了。

class Solution {
public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;sort(nums.begin(), nums.end());for (int i = 0; i < nums.size(); i++) {if (i && nums[i] == nums[i - 1]) // if (i + 1 < nums.size() &&// nums[i] == nums[i + 1])continue;for (int j = i + 1, k = nums.size() - 1; j < k; j++) {if (j > i + 1 &&nums[j] == nums[j - 1]) // if (j + 1 < nums.size() &&// nums[j] == nums[j + 1])continue;while (k - 1 > j && nums[j] + nums[k - 1] + nums[i] >= 0)--k;if (nums[i] + nums[j] + nums[k] == 0) {res.push_back({nums[i], nums[j], nums[k]});}}}return res;}
};

相关文章:

Leetcode15. 三数之和(HOT100)

链接 一般这种三数之和&#xff0c;四数之和都使用双指针&#xff0c;复杂度最优&#xff0c;次一级可使用哈希表。前者要求有序&#xff0c;后者空间上有花费。 题目&#xff1a; 题目要求答案中不能出现重复vector&#xff0c;比如{-1 1 0}和{-1 0 1}&#xff1b; 这两个…...

Oracle数据库小白备忘

sqlplus相关 导入sql文件 在sqlplus中&#xff0c;导入一个sql文件&#xff0c;是使用或者start。 如当前目录下有一个hello.sql&#xff0c;则可以使用 hello.sql 或者 start hello.sql 来进行导入&#xff0c;功能类似于mysql里面的source。 退出编辑模式 当使用sqlplus…...

DDR4与DDR3服务器内存的关键区别有哪些?

内存作为服务器性能的关键组件之一&#xff0c;已经经历了从DDR3到DDR4的过渡。DDR4内存相较于DDR3在多个方面有所提升&#xff0c;包括速度、带宽、功耗以及数据传输效率等。然而&#xff0c;尽管DDR4内存在性能上占有优势&#xff0c;DDR3内存依然在一些特定场景中得到了广泛…...

Linux: shell: bash: set -x;调试使用

man bash set -x -x After expanding each simple command, for command, case command, select command, or arithmetic for command, display the expanded value of PS4, followed by the command and its expanded arguments or associated word list. 这个可以帮助将变量…...

Hadoop生态圈框架部署 伪集群版(五)- HBase伪分布式部署

文章目录 前言一、Hbase伪分布式部署&#xff08;手动部署&#xff09;1. 下载Hbase2. 上传安装包3. 解压HBase安装包4. 配置HBase配置文件4.1 修改hbase-env.sh配置文件4.2 修改hbase-site.xml配置文件4.3 修改regionservers配置文件4.4 删除hbase中slf4j-reload4j-1.7.33.jar…...

自定义指令,全局,局部,注册

让输入框自动获取焦点(每次刷新自动获取焦点&#xff09; <template><div><h3>自定义指令</h3><input ref"inp" type"text"></div> </template><script> export default {mounted(){this.$refs.inp.focus…...

静坐修心.

文章目录 打坐的历史文化渊源东方的起源与传承西方的接受与演变现代生活中的打坐 盘腿坐对身体的影响促进脊椎健康改善呼吸系统功能增强消化系统机能改善血液循环调节神经系统错误姿势及其他潜在危害 盘腿坐对心理的作用促进内心平静与放松提升自我觉察与内在探索培养专注力与精…...

设计模式c++(一)

文章目录 一、面向对象设计原则二、模版方法三、策略模式四、观察者模式五、装饰模式六、桥模式七、工厂方法_Factory Method八、抽象工厂_Abstract Factory九、原型模式十、构建器_builder十一、单件模式_Singleton十二、享元模式_Flyweight 一、面向对象设计原则 设计模式的…...

核密度估计——从直方图到核密度(核函数)估计_带宽选择

参考 核密度估计&#xff08;KDE&#xff09;原理及实现-CSDN博客 机器学习算法&#xff08;二十一&#xff09;&#xff1a;核密度估计 Kernel Density Estimation(KDE)_算法_意念回复-GitCode 开源社区 引言 在统计学中&#xff0c;概率密度估计是一种重要的方法&#xff0…...

Vant UI Axure移动端元件库:提升移动端原型设计效率

UI框架的选择对于提升开发效率和用户体验至关重要。Vant UI&#xff0c;作为一款基于Vue.js的轻量、可靠的移动端组件库&#xff0c;自2017年开源以来&#xff0c;凭借其丰富的组件库、良好的性能以及广泛的兼容性&#xff0c;在移动端开发领域崭露头角&#xff0c;赢得了众多开…...

如何用 JavaScript 操作 DOM 元素?

如何用 JavaScript 操作 DOM 元素&#xff1f;——结合实际项目代码示例讲解 在前端开发中&#xff0c;DOM&#xff08;文档对象模型&#xff09;操作是与页面交互的核心。通过 DOM 操作&#xff0c;开发者可以动态地修改页面内容、响应用户交互、控制样式等。JavaScript 提供…...

【Ubuntu】URDC(Ubuntu远程桌面助手)安装、用法,及莫名其妙进入全黑模式的处理

1、简述 URDC是Ubuntu远程桌面助手的简称。 它可以: 实时显示桌面:URDC支持通过Windows连接至Ubuntu设备(包括x86和ARM架构,例如Jetson系列、树莓派等)的桌面及光标。远程操控双向同步剪切板多客户端连接:同一Ubuntu设备最多可同时被三台Windows客户端连接和操控,适用于…...

ES-DSL查询

term查询 因为精确查询的字段搜是不分词的字段&#xff0c;因此查询的条件也必须是不分词的词条。查询时&#xff0c;用户输入的内容跟自动值完全匹配时才认为符合条件。如果用户输入的内容过多&#xff0c;反而搜索不到数据。 语法说明&#xff1a; // term查询 GET /index…...

npm 设置镜像

要在npm中设置镜像&#xff0c;你可以使用npm config命令。以下是设置npm镜像的步骤&#xff1a; 临时使用淘宝镜像&#xff1a; npm --registry https://registry.npmmirror.com install package-name 永久设置镜像&#xff1a; npm config set registry https://registry…...

SpringMvc完整知识点一

SpringMVC概述 定义 SpringMVC是一种基于Java实现MVC设计模型的轻量级Web框架 MVC设计模型&#xff1a;即将应用程序分为三个主要组件&#xff1a;模型&#xff08;Model&#xff09;、视图&#xff08;View&#xff09;和控制器&#xff08;Controller&#xff09;。这种分离…...

STM32G4系列MCU双ADC多通道数据转换的应用

目录 概述 1 STM32Cube配置项目 1.1 基本参数配置 1.1.1 ADC1参数配置 1.1.2 ADC2参数配置 1.2 项目软件架构 2 功能实现 2.1 ADC转换初始化 2.2 ADC数据组包 3 测试函数 3.1 Vofa数据接口 3.2 输入数据 4 测试 4.1 ADC1 通道测试 4.2 ADC2 通道测试 概述 本文…...

【工具】音频文件格式转换工具

找开源资源、下载测试不同库的效果&#xff0c;然后找音频、下载音频、编写代码、测试转换、流程通畅。写一个工具花的时间越来越多了&#xff01;这个 5 天 这个工具是一个音频文件格式转换工具&#xff0c;支持对 mp3.aac.wav.caf.flac.ircam.mp2.mpeg.oga.opus.pcm.ra.spx.…...

ssl证书过期,nginx更换证书以后仍然显示过期证书

记一次nginx部署异常 今天提示ssl证书过期了&#xff0c;然后重新申请了一个证书 反反复复折腾了一个上午&#xff0c;还更换了好几个平台&#xff0c;发现怎么更换都没用&#xff0c;百度上的解决方法都试过了&#xff0c;发现都没用&#xff0c;证书还是显示的原来那一个&…...

原型模式(Prototype Pattern)——对象克隆、深克隆与浅克隆及适用场景

原型模式&#xff08;Prototype Pattern&#xff09;是设计模式中的一种创建型模式&#xff0c;目的是通过复制现有的对象来创建新的对象&#xff0c;而不是通过传统的实例化方式。原型模式常常用于需要创建大量类似对象的场景&#xff0c;可以提高性能并减少资源的消耗。下面将…...

从工标网网站解析标准信息

import requests from bs4 import BeautifulSoup 将标准搜索关键词转化成GBK格式&#xff0c;并用%连接转化后16进制&#xff0c;转化成工标网的查询网址url text “GB/T 9755” utf8_encoded_text text.encode(‘GBK’) #print(utf8_encoded_text) hex_representation ‘…...

Ip2region终极指南:如何快速部署高性能离线IP定位系统

Ip2region终极指南&#xff1a;如何快速部署高性能离线IP定位系统 【免费下载链接】ip2region Ip2region (2.0 - xdb) 是一个离线IP地址管理与定位框架&#xff0c;能够支持数十亿级别的数据段&#xff0c;并实现十微秒级的搜索性能。它为多种编程语言提供了xdb引擎实现。 项…...

常见开源软件协议介绍

在当今数字化时代&#xff0c;开源软件如同一股洪流&#xff0c;席卷了整个技术领域。从我们日常使用的操作系统&#xff0c;到复杂的大数据处理框架&#xff0c;开源软件无处不在。然而&#xff0c;在这繁荣的开源生态背后&#xff0c;有一群默默守护规则的 “卫士”&#xff…...

智能驾驶中的惯性导航:从L2到L4的IMU选型指南(2023最新)

智能驾驶中的惯性导航&#xff1a;从L2到L4的IMU选型指南&#xff08;2023最新&#xff09; 当特斯拉Model 3在隧道中失去GPS信号时&#xff0c;车载IMU仍能保持厘米级定位精度——这背后是惯性导航技术在自动驾驶领域的革命性应用。不同于消费级电子设备中仅用于计步的简易传感…...

步进电机选型与性能曲线深度解析

1. 步进电机选型的核心逻辑 第一次选步进电机时&#xff0c;我被厂家提供的十几页参数表直接整懵了——保持扭矩、牵入扭矩、转子惯量这些名词像天书一样。直到设备因为选型不当在现场疯狂丢步&#xff0c;才真正理解选型不是看哪个电机"力气大"&#xff0c;而是要让…...

别再傻傻分不清!雷达、激光雷达、超声波在ROS2里到底怎么选?实战避坑指南

雷达、激光雷达与超声波传感器在ROS2中的实战选型指南 引言 在机器人感知系统的设计中&#xff0c;传感器选型往往决定着整个项目的成败。面对市场上琳琅满目的雷达、激光雷达和超声波传感器&#xff0c;工程师们常常陷入选择困难。这三种传感器各有千秋&#xff0c;但价格、性…...

5个步骤掌握B站推流码获取与OBS直播系统搭建:从入门到专业的完整指南

5个步骤掌握B站推流码获取与OBS直播系统搭建&#xff1a;从入门到专业的完整指南 【免费下载链接】bilibili_live_stream_code 用于在准备直播时获取第三方推流码&#xff0c;以便可以绕开哔哩哔哩直播姬&#xff0c;直接在如OBS等软件中进行直播&#xff0c;软件同时提供定义直…...

Xilinx 7Series与UltraScale FPGA在线升级:STARTUPE2与STARTUPE3原理解析与实战配置

1. FPGA在线升级的核心挑战与解决方案 当我们需要对部署在设备上的FPGA进行固件升级时&#xff0c;最头疼的问题就是如何在不拆机的情况下完成这个操作。想象一下&#xff0c;如果你的智能家居设备需要更新固件&#xff0c;每次都要拆开外壳用JTAG线连接&#xff0c;那简直是工…...

HDMI接口电路设计避坑指南:TVS怎么选?阻抗如何调?这10条规则帮你一次过EMC

HDMI接口电路设计避坑指南&#xff1a;TVS怎么选&#xff1f;阻抗如何调&#xff1f;这10条规则帮你一次过EMC 当你在设计一款带有HDMI接口的产品时&#xff0c;是否遇到过这样的场景&#xff1a;明明按照常规思路完成了电路设计&#xff0c;却在EMC测试中屡屡碰壁&#xff1f…...

CMock函数模拟全解析:从ExpectAndReturn到Callback的高级用法指南

CMock函数模拟全解析&#xff1a;从ExpectAndReturn到Callback的高级用法指南 单元测试是软件开发中不可或缺的一环&#xff0c;而C语言开发者常常面临一个难题&#xff1a;如何有效地测试那些依赖外部系统或复杂模块的函数&#xff1f;这正是CMock大显身手的地方。作为Ceedlin…...

QWen 3.5plus总结的总结基准测试结果的正确方法

原文地址&#xff1a;https://dl.acm.org/doi/epdf/10.1145/5666.5673 如何用统计撒谎&#xff1a;总结基准测试结果的正确方法 作者&#xff1a;PHILIP J. FLEMING 和 JOHN J. WALLACE 在文献中&#xff0c;性能结果经常使用性能比率的算术平均值来总结&#xff0c;在某些情况…...