15---三数之和

news2024/11/25 15:34:49

给你一个整数数组 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 。

 

提示:

  • 3 <= nums.length <= 3000
  • -105 <= nums[i] <= 105

算法分析
排序+双指针
在这里插入图片描述

  1. 枚举每个数,表示该数nums[i]已被确定,在排序后的情况下,通过双指针lr分别从左边l = i + 1和右边n - 1往中间靠拢,找到nums[i] + nums[l] + nums[r] == 0的所有符合条件的搭配
  2. 在找符合条件搭配的过程中,假设sum = nums[i] + nums[l] + nums[r]
  • sum > 0,则r往左走,使sum变小
  • sum < 0,则l往右走,使sum变大
  • sum == 0,则表示找到了与nums[i]搭配的组合nums[l]nums[r],存到res
  1. 判重处理
  • 确定好nums[i]时,l 需要从i + 1开始
  • nums[i] == nums[i - 1],表示当前确定好的数与上一个一样,需要直接continue
  • 当找符合条件搭配时,即sum == 0,需要对相同的nums[l]nums[r]进行判重出来
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++)
        {
            //i > 0 并且 i 等于上一个数,去除重复方案
            if(i && 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]) continue;
                while(j < k - 1 && nums[i] + nums[j] + nums[k - 1] >= 0) k--;
                if(nums[i] + nums[j] + nums[k] == 0)
                    res.push_back({nums[i],nums[j],nums[k]});
            }
        }
        return res;
    }
};

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

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

相关文章

k8s1.19使用ceph15 rbd块存储

一、ceph集群操作 #创建rbd #创建存储池,指定pg和pgp的数量, pgp是对存在于pg的数据进行组合存储,pgp通常等于pg的值 # 创建存储池 ceph osd pool create kubernetes 128 128#对存储池启用 RBD 功能 ceph osd pool application enable kubernetes rbd#通过 RBD 命令对存储池…

《MySQL》对库进行操作(DDL语句)

文章目录 &#x1f4a1;创建库&#x1f4a1;修改库&#x1f4a1;删除库&#x1f4a1;备份库 学习DDL前&#xff0c;先掌握一下几个常用的查看指令 # 查看库 show databases; # 选中库 use [库名] # 查看连接情况 show processlist;&#x1f4a1;创建库 # &#xff08;如果不存…

TLS/SSL 协议

TLS/SSL 协议的工作原理 TLS/SSL 协议的工作原理 • 身份验证 • 保密性 • 完整 TLS/SSL 发展 TLS 协议 • Record 记录协议 • 对称加密 • Handshake 握手协议 • 验证通讯双方的身份 • 交换加解密的安全套件 • 协商加密参 TLS 安全密码套件解 对称加密的工作原理&am…

Leetcode1217. 玩筹码

Every day a Leetcode 题目来源&#xff1a; 解法1&#xff1a;贪心 首先很容易得出&#xff1a; 从某一个偶&#xff08;奇&#xff09;数位置改变到另一个偶&#xff08;奇&#xff09;数位置&#xff0c;此时的最小开销为 0&#xff1b;从某一个偶&#xff08;奇&#x…

剑指 Offer 57 - II: 和为s的连续正数序列

这里从0开始先然是不对的&#xff01;滑动窗口思想很好用&#xff0c;相等了必定移动左边&#xff01;让他变小&#xff01;这都想不到&#xff01; 首先看到返回值和题给条件明确这是一个滑动窗口任务/可变数组 &#xff0c;所以要使用List&#xff0c;然后其中元素又是数组&a…

新建vue3项目并启动访问(mac)

mac 安装、配置vue开发环境&新建vue项目并启动访问 一、 安装hbuilderx二、 安装node.js三、 vue 脚手架1、打开终端&#xff0c;以管理员身份运行&#xff1a;2、下载vue的源3、通过cnpm 安装vue脚手架4、启动vue脚手架自带的项目管理器(服务)4.1、创建空的vue项目4.2、安…

WeNet的Runtime编译与应用

一、下载visual studio 下载&#xff1a;百度输入 visual studio 官网&#xff0c;下载 visual studio并安装&#xff0c;安装完要配置环境变量&#xff0c;即把cmake路径配置进去 环境配置&#xff1a;将C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\ID…

【Python爬虫与数据分析】爬虫Json数据解析

目录 一、Json文件数据解析 二、Json数据包解析获取图片资源 三、Json数据包解析获取视频资源 一、Json文件数据解析 json字符串&#xff1a;通常类似python数据类型中的列表和字典的结合&#xff0c;也可能是单独的列表或者字典格式&#xff0c;通常可以通过json模块的函数…

蓝桥杯专题-真题版含答案-【连号区间数】【剪格子】【买不到的数目】【翻硬币】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

java获取文件夹里文件最近修改时间

概述 本人项目需要获取文件夹里面文件最近的修改时间&#xff0c;函数lastModified直接获取文件夹修改时间&#xff0c;达不到效果。 因此本人通过遍历文件夹文件&#xff0c;来一一比较获取最近的文件里面文件(夹)修改时间。原理简单&#xff0c;下面是所有的代码&#xff0c…

MySQL中这些关键字的用法,佬们get到了嘛

前言&#xff1a; 最近粉丝问了一个问题&#xff0c;是关于Limit分页的用法&#xff0c;他没有理解清楚&#xff0c;因此本篇文章主要讲解MySQL的关键字的知识。该专栏比较适合刚入坑Java的小白以及准备秋招的大佬阅读。 如果文章有什么需要改进的地方欢迎大佬提出&#xff0c…

MOdaHub魔搭社区:AI大模型应用落地的三大阻碍

目录 一是基于通用大模型研发行业大模型的难度。 二是私有数据的安全隐患。 三是落地成本的可控性。 To B 的探索并非现在才开始。自 ChatGPT 开放 API 插件以来&#xff0c;国内的多家云厂商在推出通用大模型时&#xff0c;也往往同步其对行业赋能的意愿。但大模型 To B 探…

吸烟(抽烟)检测和识别1:吸烟(抽烟)数据集说明(含下载链接)

吸烟(抽烟)检测和识别1&#xff1a;吸烟(抽烟)数据集说明(含下载链接) 目录 吸烟(抽烟)检测和识别1&#xff1a;吸烟(抽烟)数据集说明(含下载链接) 1. 前言 2. 吸烟(抽烟)类别说明 3. 吸烟(抽烟)分类数据集 &#xff08;1&#xff09;smoking-dataset &#xff08;2&…

内幕交易最高判终身监禁:韩国首部独立「加密法案」全文来了

2023年6月30日&#xff0c;韩国国会政务委员会通过了该国首部针对虚拟资产的立法——《虚拟资产用户保护法&#xff08;가상자산 이용자 보호 등에 관한 법률안&#xff09;》&#xff0c;目的是保护虚拟资产使用者及限制不公平交易&#xff0c;将在颁布一年后开始生效&#xf…

如何用 PowerPoint 制作滚动字幕

想知道如何使用 PowerPoint 制作滚动字幕吗&#xff1f;让您的演示更生动有趣&#xff01;请紧跟以下教程&#xff0c;学习这个令人赞叹的技巧&#xff01; 是不是你觉得自己制作的PPT过于呆板和无聊&#xff0c;而别人的PPT却充满了高级和趣味&#xff1f;原因在于你的PPT缺乏…

信创信创,有信难创

本土化产品&#xff0c;近年来备受追捧。比如馒头&#xff0c;成了更适合中国宝宝体质的欧包&#xff0c;有的创意馒头甚至可以卖出二十多元的“高价”&#xff1b;酱香饼&#xff0c;更适合中国宝宝体质的披萨&#xff1b;中药汤&#xff0c;更适合中国宝宝体质的咖啡…… 这样…

青岛大学_王卓老师【数据结构与算法】Week04_07_顺序表和链表的比较_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

uniapp实现腾讯地图定位,生成点,多点连线,清空点线,卫星地图等功能

功能&#xff1a; 1.地图上标点&#xff0c;点有内容&#xff0c;点击点后可以查看点的信息&#xff0c;详情 2.点击地图生成点&#xff0c;点击多个点后可以实现点连线功能 3.点击按钮后&#xff0c;可以把生成的点清空 4.卫星地图和默认地图切换功能 1.完整代码字段讲解 1.…

集成免费Chatgpt的WeTab安装与使用详解

集成免费Chatgpt的WeTab安装与使用详解 一、WeTab简介二、Chatgpt简介三、WeTab安装3.1 Edge浏览器在线安装教程3.2 Chrome浏览器在线安装教程 四、WeTab和ChatGPT的简单使用4.1 WeTab简单使用4.2 集成ChatGPT的简单使用 一、WeTab简介 WeTab是一款集成了多种实用工具的在线工…

第47步 深度学习图像识别:SqueezeNet建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;SqueezeNet SqueezeNet是一种轻量级的深度神经网络架构&#xff0c;由Iandola等人在2016年提出。这种模型的最大特点是参数量极少&#xff0c;仅有510千个参数&#xff0c;而且模型大小只有5MB&#xff0c;比…