LeetCode-15 三数之和

LeetCode-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 。

提示:

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

solution

采用双指针的思想,

  1. 排序,并初始化向量res
  2. 设当前指向为i,其中j指向i的右边,k指向vector的最后一个位置,此时可以保证 nums[i]<= nums[j]<= nums[k]
  3. 当j<k时进入循环
  4. nums[i]大于0时,nums[i] + nums[j] + nums[k]>0必然存在,退出循环
  5. 若出现nums[i]=nums[i - 1],则可能导致res有重复元素,则执行continue操作,使同一个数字只计算一次
  6. sum = nums[i] + nums[j] + nums[k],若sum<0,则将j向右移动,若sum>0,则将k向左移动,若sum=0,则放入向量res中,并去除j右侧的重复元素和k左侧的重复元素
  7. 重复3-6步,直到j>=k时退出循环
#include <vector>using namespace std;//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:vector<vector<int> > threeSum(vector<int> &nums) {int l = nums.size();vector<vector<int> > res;sort(nums.begin(), nums.end());for (int i = 0; i < l - 2; ++i) {if (nums[i] > 0) {break;}if (i - 1 >= 0 && nums[i] == nums[i - 1]) {continue;}int j = i + 1, k = l - 1;while (j < k) {int sum = nums[i] + nums[j] + nums[k];if (sum < 0) {while (j < k && nums[j] == nums[++j]) {//j++;}} else if (sum > 0) {while (j < k && nums[k] == nums[--k]) {//k--;}} else {res.push_back({nums[i], nums[j], nums[k]});while (j < k && nums[j] == nums[++j]) {//j++;}while (j < k && nums[k] == nums[--k]) {//k--;}}}}return res;}
};
//leetcode submit region end(Prohibit modification and deletion)int main() {Solution solution;vector<int> vec = {-1, 0, 1, 2, -1, -4};solution.threeSum(vec);
}

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

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

相关文章

Deepin更换仿Mac主题

上一篇博客说了要写一篇deepin系统的美化教程 先看效果图&#xff1a; 准备工作&#xff1a; 1.你自己 嘻嘻嘻 2.能上网的deepin15.11电脑 首先去下载主题 本次需要系统美化3部分&#xff1a;1.图标 2.光标 3.壁纸 开始之前&#xff0c;请先把你的窗口特效打开&#xff0c;…

深度解析LinkedList

LinkedList是Java集合框架中List接口的实现之一&#xff0c;它以双向链表的形式存储元素。与传统的数组相比&#xff0c;链表具有更高的灵活性&#xff0c;特别适用于频繁的插入和删除操作。让我们从底层实现开始深入了解这个强大的数据结构。 底层数据结构 LinkedList的底层数…

[node] Node.js的文件系统

[node] Node.js的文件系统 文件系统的使用异步和同步input.txt示例 常用方法打开文件语法示例 获取文件信息语法示例 写入文件语法示例 读取文件语法示例 关闭文件语法示例 截取文件语法示例 删除文件语法示例 创建目录语法示例 读取目录语法示例 删除目录语法示例 文件模块方法…

【Stress-ng】CentOS 7 离线安装Stress-ng

方法一&#xff1a;手动下载RPM包以及依赖 Stree-ng libmd libbsd Stress-ng有两个依赖包&#xff0c;安装顺序如下&#xff1a; rpm -i libmd-1.1.0-1.el7.x86_64.rpm rpm -i libbsd-0.11.7-2.el7.x86_64.rpm rpm -i stress-ng-0.07.29-2.el7.x86_64.rpm方法二&#xff1a…

天猫数据分析(软件工具)-2023年11月天猫保健品行业分析报告:市场需求扩容,年轻人是主流群体

近年来&#xff0c;随着健康经济、颜值经济的兴起&#xff0c;越来越多的年轻人加入养生大军&#xff0c;成为保健食品市场上的一股新力量&#xff0c;带动市场扩容。根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;今年11月份&#xff0c;天猫平台上保健食品的销量为24…

AUTOSAR从入门到精通-通信管理模块(CanNm)(二)

目录 知识储备 AUTOSAR CAN网络管理 CAN网络管理功能概述 CAN网络的休眠和唤醒 AUTOSAR CAN局部网络模型 NM PDUs 接收处理

YOLOv8改进 | 主干篇 | 利用MobileNetV3替换Backbone(轻量化网络结构)

一、本文介绍 本文给大家带来的改进机制是MobileNetV3&#xff0c;其主要改进思想集中在结合硬件感知的网络架构搜索&#xff08;NAS&#xff09;和NetAdapt算法&#xff0c;以优化移动设备CPU上的性能。它采用了新颖的架构设计&#xff0c;包括反转残差结构和线性瓶颈层&…

Win10使用OpenSSL生成证书的详细步骤(NodeJS Https服务器源码)

远程开启硬件权限&#xff0c;会用到SSL证书。 以下是Win10系统下用OpenSSL生成测试用证书的步骤。 Step 1. 下载OpenSSL,一般选择64位的MSI Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 一路点下来&#xff0c;如果后续请你捐款&#xff…

Unity | HybridCLR 热更新(Windows端)

目录 一、准备工作 1.环境相关 2.Unity中配置 二、热更新 1.创建 HotUpdate 热更新模块 2.安装和配置HybridCLR 3.配置PlayerSettings 4.创建热更新相关脚本 5.打包dll 6.测试热更新 一、准备工作 1.环境相关 安装git环境。Win下需要安装visual studio 2019或更高版…

使用Aspose.Slides 控件,在线将 ODP 转换为 PPT

OpenOffice 等开源生产力工具有其用途。但如果您希望在线将 ODP 转换为 PPT&#xff0c;您很可能已经确定 Microsoft PowerPoint 的专有 PPT 格式和平台比 OpenOffice ODP 更适合您的需求。 本文的第一部分重点介绍在线将 ODP 转换为 PPT 的快速方法。第二部分探讨涉及C#应用程…

python爬虫进阶篇:Scrapy中使用Selenium+Firefox浏览器爬取沪深A股股票行情

一、前言 上篇记录了Scrapy搭配selenium的使用方法&#xff0c;有了基本的了解后我们可以将这项技术落实到实际需求中。目前很多股票网站的行情信息都是动态数据&#xff0c;我们可以用Scrapyselenium对股票进行实时采集并持久化&#xff0c;再进行数据分析、邮件通知等操作。…

Java中的泛型到底是干啥用的?

Java中的泛型到底是干啥用的&#xff1f; Java中的泛型是一种强大的特性&#xff0c;它允许你编写能够处理各种数据类型的通用代码&#xff0c;而不需要在每个类或方法中重复实现相似的逻辑。泛型的主要目的是提高代码的重用性、类型安全性和程序的可读性。 下面是Java中泛型…

R语言中使用ggplot2绘制散点图箱线图,附加显著性检验

散点图可以直观反映数据的分布&#xff0c;箱线图可以展示均值等关键统计量&#xff0c;二者结合能够清晰呈现数据蕴含的信息。 本篇笔记主要内容&#xff1a;介绍R语言中绘制箱线图和散点图的方法&#xff0c;以及二者结合展示教程&#xff0c;添加差异比较显著性分析&#xf…

27.Java程序设计-基于Springboot的在线考试系统小程序设计与实现

1. 引言 随着数字化教育的发展&#xff0c;在线考试系统成为教育领域的一项重要工具。本论文旨在介绍一个基于Spring Boot框架的在线考试系统小程序的设计与实现。在线考试系统的开发旨在提高考试的效率&#xff0c;简化管理流程&#xff0c;并提供更好的用户体验。 2. 系统设…

UG阵列特征

阵列特征&#xff1a;将一个或多个特征&#xff0c;沿线性方向阵列复制图形 实体建模时建议草图尽可能简单&#xff0c;能特征阵列的别草图阵列 阵列特征命令在如下位置&#xff1a;菜单-插入-关联复制-阵列特征 当我们只需要选中的特征沿着一个或两个方向进行阵列的时候&…

LeetCode刷题(文章链接汇总)

参考引用&#xff1a;代码随想录 注&#xff1a;每道 LeetCode 题目都使用 ACM 代码模式&#xff0c;可直接在本地运行&#xff0c;蓝色字体为题目超链接 LeetCode刷题&#xff08;ACM模式&#xff09;-01数组 LeetCode刷题&#xff08;ACM模式&#xff09;-02链表 LeetCode刷题…

flutter 路由配置

get用法 进入新页面 Get.to(NextScreen());back回退操作 使用场景&#xff1a; 关闭Dialogs、SnackBars或者退出当前页面 Get.back(); off类似于replace操作 它会替拿当新页面换掉当前页面&#xff0c;并且新页面左上角没有返回按钮&#xff0c; Get.off(NextScreen()); off…

Day68力扣打卡

打卡记录 得到山形数组的最少删除次数&#xff08;线性DP 前后缀分解&#xff09; 链接 class Solution:def minimumMountainRemovals(self, nums: List[int]) -> int:n len(nums)pre, suf [1] * n, [1] * nfor i in range(n):for j in range(i):if nums[j] < nums[…

Go 随机密码

一.Go实现随机密码 随机密码 package mainimport ("fmt""math/rand""os""strconv""time" )func RandomPassword(num int) {length : numif len(os.Args) > 1 {arg : os.Args[1]i, err : strconv.ParseInt(arg, 10, 6…

HarmonyOS - macOS 上搭建 鸿蒙开发环境

文章目录 安装 DevEco第一个 App1、工程基本信息设置2、安装设备3、运行工程 安装 DevEco 软件下载地址&#xff1a; https://developer.harmonyos.com/cn/develop/deveco-studio 今天我下载 DevEco Studio 3.1.1 Release - Mac 版本 解压后是一个 dmg 文件&#xff08;也不必…