【LeetCode刷题记录】15. 三数之和

15 三数之和

给你一个整数数组 nums ,判断是否存在三元组 [ n u m s [ i ] , n u m s [ j ] , n u m s [ k ] ] [nums[i], nums[j], nums[k]] [nums[i],nums[j],nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 n u m s [ i ] + n u m s [ j ] + n u m s [ k ] = = 0 nums[i] + nums[j] + nums[k] == 0 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
− 1 0 5 -10^5 105 <= nums[i] <= 1 0 5 10^5 105

思路

本题使用双指针思想。首先需要将数组进行排序,然后将 k 指针固定,i 指针指向 k 的下一个元素,j 指向末元素。
在从头至尾遍历k的情况下,对 i,j 指针分情况讨论,这样可使时间复杂度降到 O ( N 2 ) O(N^2) O(N2).固定k,
n u m s [ i ] + n u m s [ j ] + n u m s [ k ] < 0 nums[i]+nums[j]+nums[k]<0 nums[i]+nums[j]+nums[k]<0时, i + + i++ i++;
n u m s [ i ] + n u m s [ j ] + n u m s [ k ] > 0 nums[i]+nums[j]+nums[k]>0 nums[i]+nums[j]+nums[k]>0时, j − − j-- j;
n u m s [ i ] + n u m s [ j ] + n u m s [ k ] = = 0 nums[i]+nums[j]+nums[k]==0 nums[i]+nums[j]+nums[k]==0时,存储三个元素到数组中。
i = = j i==j i==j时就跳出循环。
注意直接这样写会超出时间限制,需要考虑重复元素的情况:
只有元素不同才进行枚举。

if (k > 0 && nums[k] == nums[k - 1]) {continue;}
if (i > k + 1 && nums[i] == nums[i - 1]) {continue;}

代码

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

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

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

相关文章

java基础语法(11)| 内部类

1. 内部类 1.1 什么是内部类 将一个类A定义在另一个类B里面&#xff0c;里面的那个类A就称为内部类&#xff0c;B则称为外部类。 1.2 内部类的分类 成员内部类 局部内部类 匿名内部类 1.3 成员内部类 在描述事物时&#xff0c;若一个事物内部还包含其他事物&#xff0c;就…

基于starganvc2的变声器论文原理解读

数据与代码见文末 论文地址&#xff1a;https://arxiv.org/pdf/1907.12279.pdf 1.概述 什么是变声器&#xff0c;变声器就是将语音特征进行转换&#xff0c;而语音内容不改变 那么我们如何构建一个变声器呢&#xff1f; 首先&#xff0c;我们肯定不能为转换的每一种风格的声…

JavaEE初阶——多线程(一)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程的第一部分:引入线程以及创建多线程的几种方式 此文章是建立在前一篇文章进程的基础上的 如果有不足的或者错误的请您指出! 1.认识线程 我们知道现代的cpu大多都是多核心…

【Figma】安装指南及基础操作

先前做UI设计一直都是用PS等绘图软件设计&#xff0c;但发现在纠结像素和排版问题上会花很多时间&#xff0c;再加上AI没来得及上手&#xff0c;就需要迅速出成图&#xff0c;此时通过论坛发现了figma&#xff0c;基本上可以满足足够的需求&#xff0c;并且可以在windows系统上…

【云开发笔记NO.27】分布式数据库

在云原生开发中&#xff0c;分布式数据库是一种特殊类型的数据库管理系统&#xff0c;其数据不是存储在单个集中的服务器上&#xff0c;而是分散在网络中的多个节点或服务器上。这种分散存储的方式使得分布式数据库具有很高的可扩展性、容错性和性能优势。云原生环境下的分布式…

SVG图标显示

SVG图标显示 1.安装SharpVectors.Wpf包 2.添加引用 xmlns:svgc"http://sharpvectors.codeplex.com/svgc/"3.加载svg文件&#xff0c;生成操作选择资源(Resource) 4.UI界面显示SVG图像 <Button Click"OnSaveFileClick" ToolTip"Save Svg File…

武汉星起航:跨境电商领域崭露头角,以实战经验引领行业新潮流

随着全球经济的演进&#xff0c;跨境电商正成为国际贸易的引擎&#xff0c;而武汉星起航电子商务有限公司凭借其丰富实战经验和专业团队&#xff0c;在这一领域取得了引人瞩目的成绩。公司成立于2020年&#xff0c;自2017年起紧紧围绕亚马逊自营店铺&#xff0c;致力于为合作伙…

基于Spring Boot+Vue的在线拍卖系统

随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、…

初学python记录:力扣1600. 王位继承顺序

题目&#xff1a; 一个王国里住着国王、他的孩子们、他的孙子们等等。每一个时间点&#xff0c;这个家庭里有人出生也有人死亡。 这个王国有一个明确规定的王位继承顺序&#xff0c;第一继承人总是国王自己。我们定义递归函数 Successor(x, curOrder) &#xff0c;给定一个人…

通用接口开放平台设计与实现——(30)消息服务端之消息重发优化

背景 消息服务通信机制为异步&#xff0c;且网络连接不是100%可靠&#xff0c;会因为网络闪断问题丢失消息&#xff0c;作为企业应用&#xff0c;需要保证业务消息传输的可靠性&#xff0c;需实现以下机制&#xff1a; a)发送方重发机制&#xff1a;消息发送方对未收到响应的消…

谷歌(Google)技术面试——全部面试流程

简介 本篇介绍一下谷歌的全部面试流程,包括两次电话面试和五次现场面试。之后便是招聘委员会评定和录用审核。 Google 电话面试 电话面试通常会持续 30 至 60 分钟。 电话面试的内容涵盖数据结构与算法。准备好用你最擅长的编程语言编写 20 至 30 行代码。代码应该保持整洁…

酱油行业市场需求及广阔前景分析

随着居民消费升级&#xff0c;对高品质生活的向往使得酱油市场需求持续增长。消费者对酱油的功能性需求日益细分&#xff0c;追求健康、天然与个性化的产品特性&#xff0c;从而推动了市场的多元化进步。 同时&#xff0c;餐饮业的蓬勃发展以及外卖市场的扩大&#xff0c;均为酱…

【Django开发】前后端分离美多商城项目第6篇:用户部分,1. 业务说明【附代码文档】

美多商城项目4.0文档完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;美多商城&#xff0c;项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备&#xff0c;配置1. 修改set…

通用分布式锁组件

通用分布式锁组件 1 Redisson1.1介绍1.2 为什么要使用Redisson实现分布式锁1.2.1 锁续期的问题1.2.2 获取锁尝试的问题1.2.3 可重入问题 1.3 Wath Dog的自动延期机制1.4 快速了解1.5 项目集成 2 定义通用分布式锁组件2.1 实现思路分析2.2 定义注解2.3 定义切面2.4 使用锁2.5.工…

STL之string模拟实现

面试题&#xff1a;简易版string(深拷贝与浅拷贝的问题) 如果要实现简易版的string 无需涉及增容问题&#xff0c;成员变量可以不用存储容量和元素个数 构造函数 错误示范 class string {string(): _str(nullptr){}string(const char* str): _str(str){}char& operator[](s…

函数/类模板详解

目录 概述 函数模板 1.函数模板的定义 2.函数模板的使用 3.非类型的模板参数 类模板 1.函数模板的定义 2.类模板的成员函数 3.模板类名字的使用 4.非类型的模板参数 概述 泛型编程是一种编程思想&#xff0c;其追求摆脱数据类型的束缚&#xff0c;通过将数据类型作为…

Redis数据库:高可用(主从复制、哨兵模式、cluster集群)

目录 前言 一、Redis数据库高可用 二、Redis 主从复制 1、Redis主从复制概述 1.1 Redis主从复制概念 1.2 Redis主从复制的作用 1.3 Redis主从复制的流程 2、搭建Redis主从复制 2.1 环境部署 2.2 主服务器修改配置文件 2.3 从服务器修改配置文件 2.4 测试主从复制效…

负氧离子监测站解析

TH-FZ4防腐木负氧离子监测站&#xff0c;作为一种独特的空气质量监测设备&#xff0c;以其独特的优势在生态环保领域发挥着日益重要的作用。这种监测站不仅具备防腐木材质带来的天然美感与耐久性&#xff0c;更结合了先进的负氧离子监测技术&#xff0c;为环境保护和生态旅游等…

[开源]基于SVM的时间序列预测python代码

整理了SVM的时间序列预测python代码分享给大家。记得点赞哦 #!/usr/bin/env python # coding: utf-8import numpy as np import matplotlib.pyplot as plt import pandas as pd from sklearn import preprocessing from sklearn.metrics import mean_squared_error from math i…

短剧小程序系统开发,让短剧观看与创作更加便捷。短剧系统源码搭建

一、目前短剧发展趋势 1. 市场规模&#xff1a;根据数据来看&#xff0c;2023年中国微短剧市场规模达到了373.9亿元&#xff0c;同比上升了267.65%。预计2024年市场规模将超过500亿元。这一市场规模的增长速度非常显著&#xff0c;显示出短剧行业的巨大潜力和发展前景。 2. 投…