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

LeetCode 15. 三数之和

三数之和

题目链接 15. 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请

你返回所有和为 0 且不重复的三元组。

**注意:**答案中不可以包含重复的三元组。

示例 1:

输入: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] 。
注意,输出的顺序和三元组的顺序并不重要。

示例 2:

输入:nums = [0,1,1]
输出:[]
解释:唯一可能的三元组和不为 0 。

示例 3:

输入:nums = [0,0,0]
输出:[[0,0,0]]
解释:唯一可能的三元组和为 0 。

题目解释

在数组中找到三个元素,然后让他们的和为0,注意的是我们结果不要重复.

算法原理

这个很简单,我们先排序.然后固定一个元素val,在这个前面寻找两个元素,求他们的和为-val.这不就退化成我们的两个元素之和了吗.这里我们需要解决两个问题

  • 为何当val为最大值的时候,我们在前面选两个数一定是所有情况,这是对于每一个结果而言,我们的三个元素中一定存在一个值比较大(都为0的也是符合下面的), 我们将数组中的每一个元素都作为一个最大值,让后遍历整个数组,就可以收取所有情况
  • 如何解决重复问题,这里提供两个方法,一个是都保存下来,等到最后处理,麻烦.第二个是在收集结果的时候就处理了

细节补充

补充下细节,我们如何处理.

  • 固定下最大值val, 收集结果之后跳过重复的val
  • 对于收集的一次结果,跳过重复的num[left]和num[right]

代码编写

class Solution
{
public:vector<vector<int>> threeSum(vector<int> &nums){vector<vector<int>> reuslt;sort(nums.begin(), nums.end());for (int i = nums.size() - 1; i >= 2;){int val = nums[i];int left = 0;int right = i - 1;while (left < right){int sum = nums[left] + nums[right];if (sum + val == 0){// 收集reuslt.push_back({nums[left], nums[right], val});// 跟新left++;right--;while (left < right && nums[left] == nums[left - 1])left++;while (left < right && nums[right] == nums[right + 1])right--;}else if (sum > -val){right--;}else{left++;}}while (i >= 2 && nums[i] == val){i--;}}return reuslt;}
};

相关文章:

LeetCode 15. 三数之和

三数之和 题目链接 15. 三数之和 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 **注意&#xff1a;**答案…...

React-native-camera 在小米手机上拍照查看闪退

场景&#xff1a;为实现可拍照和录像的相机用react-native-camera这个库手写一个相机&#xff0c;发现了拍出来的图片在小米10上查看闪退 根据手机后台捕获的错误信息是什么玩意太大了&#xff08;之前还以为是图片显示组件的问题&#xff09; 改进&#xff1a;相机吊起的时候…...

nodejs+vue大学生社团管理系统

通过软件的需求分析已经获得了系统的基本功能需求&#xff0c;根据需求&#xff0c;将大学生社团管理系统平台功能模块主要分为管理员模块。管理员添加社团成员管理、社团信息管理&#xff0c;社长管理、用户注册管理等操作。 目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1…...

异步编程详解(.NET)

在之前写的一篇关于async和await的前世今生的文章之后&#xff0c;大家似乎在async和await提高网站处理能力方面还有一些疑问&#xff0c;很多网站本身也做了不少的尝试。今天我们再来回答一下这个问题&#xff0c;同时我会做一个async和await在WinForm中的尝试&#xff0c;并且…...

excel怎么固定前几行前几列不滚动?

在Excel中&#xff0c;如果你想固定前几行或前几列不滚动&#xff0c;可以通过以下几种方法来实现。详细的介绍如下&#xff1a; **固定前几行不滚动&#xff1a;** 1. 选择需要固定的行数。例如&#xff0c;如果你想要固定前3行&#xff0c;应该选中第4行的单元格。 2. 在E…...

elasticsearch完整学习

文章目录 elasticsearch一、概念二、ELK集群部署三、图形化界面 elasticsearch 一、概念 1、ELKStack简介&#xff08;都是java架构&#xff0c;需要jdk底层&#xff09; 什么是ELK&#xff1f;通俗来讲&#xff0c;ELK是由Elasticsearch、Logstash、Kibana 三个开源软件组成的…...

vscode Coder Runner 运行C++

1. 设置Code Runner 2. 防止输入读不到&#xff0c;把在终端运行勾上。 3. 设置minw/bin的环境变量 安装mingw教程&#xff1a;https://blog.csdn.net/fancy_male/article/details/133992000 4. 见图...

牛客网刷题-(2)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…...

FreeRTOS基础(如何学好FreeRTOS?)

目录 基础知识 进阶内容 后期“摆烂” 基础知识 实时操作系统 (RTOS)&#xff1a;FreeRTOS是一个实时操作系统&#xff0c;它提供了任务管理、调度和同步等功能&#xff0c;在嵌入式系统中有效地管理多个任务。 任务&#xff08;Task&#xff09;&#xff1a;任务是在RTOS…...

读书笔记:Effective C++ 2.0 版,条款43(多继承)、条款44(概念明确)、条款45-50(杂项)

条款43: 明智地使用多继承 并没有禁止&#xff0c;从概念上讲&#xff0c;多继承可能更符合真实世界。 条款44: 说你想说的&#xff1b;理解你所说的 概念明确 条款45: 弄清C在幕后为你所写、所调用的函数 隐性成本&#xff0c;看下编译后的c、asm源码。 条款46: 宁可编译和…...

最新Jn建站系统2.0 已集成各类源码 【附视频安装教程】

附视频安装教程|已集成各类源码 目前已集成的网站&#xff1a; 1.发卡网(最新) 2.代刷网(无需授权) 3. 博客网(自带模板) 4.易支付(稳定版) 5.个人导航网(简洁) 6.代理查询网 7.留言网 8.匿名网 9.表白墙(最新) 10.抽奖网 11.源码站 12.z-blog博客程序 13.织梦CM…...

JAVA多线程基础篇--守护线程(Daemon Thread)

1.概述 JAVA中的线程主要分为两类&#xff1a;用户线程&#xff08;User Thread&#xff09;和守护线程(Daemon Thread)。JAVA语言中无论是线程还是线程池&#xff0c;默认都是用户线程&#xff0c;因此用户线程也被称为普通线程。守护线程也被称之为后台线程、服务线程或精灵…...

对知识蒸馏的一些理解

知识蒸馏是一种模型压缩技术&#xff0c;它通过从一个大模型&#xff08;教师模型&#xff09;中传输知识到一个小模型&#xff08;学生模型&#xff09;中来提高学生模型的性能&#xff0c;知识蒸馏也要用到真实的数据集标签。 软损失soft loss就是拿教师模型在蒸馏温度为T的…...

概率论_概率公式中的分号(;)、逗号(,)、竖线(|) 及其优先级

目录 1.概率公式中的分号(;)、逗号(,)、竖线(|) 2.各种概率相关的基本概念 2.1 联合概率 2.2 条件概率&#xff08;定义&#xff09; 2.3 全概率(乘法公式的加强版) 2.4 贝叶斯公式 贝叶斯定理的公式推导 1.概率公式中的分号(;)、逗号(,)、竖线(|) ; 分号代表前后是两类…...

【C++】二叉树进阶 -- 详解

一、二叉搜索树概念 二叉搜索树 又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值 若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根节点…...

K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路

K8S集群中Node节点资源不足导致Pod无法运行的故障排查思路 Node节点资源不足可能会产生的故障 故障一&#xff1a;Pod数量太多超出物理节点的限制每一台Node节点中默认限制最多运行110个Pod资源&#xff0c;当一个应用程序有成百上千的Pod资源时&#xff0c;如果不扩容Node节…...

Node.js与npm版本比对

Node.js与npm版本比对 Node.js与npm版本比对版本对比表Node版本对比 Node.js与npm版本比对 我们在项目开发过程中&#xff0c;经常会遇到公司一些老的前端工程项目&#xff0c;而我们当前的node及npm版本都是相对比较新的了。 在运行以前工程时&#xff0c;会遇到相关环境不匹…...

智加科技与东风柳汽达成深度合作 自动驾驶重卡计划2024年初量产交付

&#xff08;2023年10月19日&#xff0c;苏州&#xff09;全球领先的重卡自动驾驶技术公司智加科技与东风柳汽宣布&#xff0c;双方共同开发的自动驾驶重卡H7计划2024年初实现量产交付。未来&#xff0c;双方将携手推出安全可靠、高性价比、性能卓越的自动驾驶重卡产品&#xf…...

mac下配置环境-node以及nvm

当前配置环境主要针对于mac下系统&#xff0c;需要提前安装brew包 如需要配置&#xff0c;可查阅&#xff1a;Brew包的基本安装&#xff08;手把手教学&#xff09;-CSDN博客 如果是window环境配置&#xff0c;分享一个不错的帖子&#xff1a;nvm的安装和使用&#xff08;详细&…...

Elasticsearch基础篇(六):es创建映射和设置

es创建映射和设置 一、什么是 Elasticsearch 映射&#xff1f;二、映射中的字段类型常见字段类型 &#xff08;Common data types&#xff09;对象和关联类型&#xff08;Objects and relational types&#xff09;结构化数据类型&#xff08;Structured data types&#xff09…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型

CVPR 2025 | MIMO&#xff1a;支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题&#xff1a;MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者&#xff1a;Yanyuan Chen, Dexuan Xu, Yu Hu…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

(转)什么是DockerCompose?它有什么作用?

一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用&#xff0c;而无需手动一个个创建和运行容器。 Compose文件是一个文本文件&#xff0c;通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)

RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发&#xff0c;后来由Pivotal Software Inc.&#xff08;现为VMware子公司&#xff09;接管。RabbitMQ 是一个开源的消息代理和队列服务器&#xff0c;用 Erlang 语言编写。广泛应用于各种分布…...