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

每日一题:三数之和

给你一个整数数组 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] 。
注意,输出的顺序和三元组的顺序并不重要。

堆排序+双指针

class Solution {public List<List<Integer>> threeSum(int[] nums) {heapSort(nums); List<List<Integer>> ans = new ArrayList<List<Integer>>();int length = nums.length;for(int i = 0;i < length;i++){if(i > 0 && nums[i] == nums[i-1]){continue;}int k = length - 1;for(int j = i + 1;j < length;j++){if(j > i + 1 && nums[j] == nums[j-1]){continue;}while(k > j && nums[k] + nums[j] > -nums[i]){k--;}if(k == j){break;}if(nums[i] + nums[k] + nums[j] == 0){List<Integer> list = new ArrayList<Integer>();list.add(nums[i]);list.add(nums[j]);list.add(nums[k]);ans.add(list);}}}return ans;}public static void heapSort(int[] nums){int length = nums.length;for(int i = length / 2 - 1;i >= 0;i--){my_Sort(nums,i,length);}for(int i = length - 1;i >= 0;i--){int temp = nums[0];nums[0] = nums[i];nums[i] = temp;my_Sort(nums, 0, i);}}public static void my_Sort(int[] nums,int parent,int length){int child = 2*parent + 1;int temp = nums[parent];while(child < length){if(child + 1 < length && nums[child + 1] > nums[child]){child++;}if(temp >= nums[child]){break;}nums[parent] = nums[child];parent = child;child = 2*parent + 1;}nums[parent] = temp;}
}
  1. 首先调用heapSort方法对输入数组nums进行堆排序。
  2. 创建一个空的列表ans用于存储结果。
  3. 遍历排序后的数组,对于每个元素nums[i],如果与前一个元素相同则跳过,避免重复解。
  4. 设置两个指针jk,其中ji+1开始遍历,k从数组末尾开始向前移动。
  5. 如果j与前一个元素相同则跳过,避免重复解。
  6. 在循环中,当nums[k] + nums[j] > -nums[i]时,将k向前移动一位,缩小搜索范围。
  7. 如果k == j,说明没有找到满足条件的三元组,跳出内层循环。
  8. 如果nums[i] + nums[k] + nums[j] == 0,说明找到了一组满足条件的三元组,将其添加到结果列表ans中。
  9. 最后返回结果列表ans

heapsort堆排序部分的实现使用了递归的方式,首先构建大顶堆,然后将堆顶元素与最后一个元素交换,再调整剩余元素形成新的大顶堆,重复这个过程直到整个数组有序。

相关文章:

每日一题:三数之和

给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 示例 1…...

【SCI绘图】【曲线图系列2 python】多类别标签对比的曲线图

SCI&#xff0c;CCF&#xff0c;EI及核心期刊绘图宝典&#xff0c;爆款持续更新&#xff0c;助力科研&#xff01; 本期分享&#xff1a; 【SCI绘图】【曲线图系列2 python】多类别标签对比的曲线图&#xff0c;文末附完整代码。 1.环境准备 python 3 import proplot as pp…...

达梦DMHS-Manager工具安装部署

目录 1、前言 1.1、平台架构 1.2、平台原理 2、环境准备 2.1、硬件环境 2.2、软件环境 2.3、安装DMHS 2.3.1、源端DMHS前期准备 2.3.2、源端DMHS安装 2.3.3、目的端DMHS安装 3、DMHS-Manager客户端部署 3.1、启动dmhs web服务 3.2、登录web管理平台 4、添加DMHS实…...

Marketo营销自动化集成Zoho CRM

Marketo 本身是一种营销自动化工具&#xff0c;可让您根据指定的标准对潜在客户进行评分&#xff0c;并确定哪些潜在客户最有可能进行转化。 CRM 和 Marketo 之间的紧密集成可帮助您规划销售和营销活动&#xff0c;以培育这些高价值潜在客户并最大限度地提高您的团队可以赢得的…...

【Leetcode每日一题】模拟 - 外观数列(难度⭐⭐)(51)

1. 题目解析 题目链接&#xff1a;38. 外观数列 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 所谓“外观数列”&#xff0c;其实只是依次统计字符串中连续且相同的字符的个数。依照题意&#xff0c;依次模拟即 可。…...

CMakeLists.txt编写简单介绍:CMakeLists.txt同时编译.cpp和.cu

关于CMakeLists.txt的相关介绍,这里不赘诉,本人的出发点是借助于CMakeLists.txt掌握基本的C++构建项目流程,下面是本人根据网络资料以及个人实践掌握的资料。 CMakeList.txt构建C++项目 下图是一个使用CUDA实现hello world的项目,一般来说,一个标准的C++项目包括三个文件…...

MSSQL有关数据库、表的循环操作可使用的存储过程 sp_MSforeachdb 及 sp_MSforeachtable

MSSQL有关数据库、表的循环操作可使用的存储过程: 1. sp_MSforeachdb command1print ?, command2DBCC CHECKDB(?) --检查所有的数据库 2. sp_MSforeachtable command1print ?, command2sp_spaceused ? --统计各个表的空间使用情况 ​ 【说明】sys.​sp_MSforeachdb 和 …...

day63 单调栈part02

503. 下一个更大元素 II 中等 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的 下一个更大的元素 是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更…...

上市公司股权性质演变:2000-2022年集中度数据深度剖析(5W+数据)

01、数据介绍 股权性质主要指的是股份公司中不同性质的股东即股权所有人的身份&#xff0c;以及他们各自持有的股份比例。在我国&#xff0c;股权性质通常涉及国家股东、法人股东&#xff08;包括机构投资者&#xff09;和流通股东等。 股权集中度则是反映公司股东对管理者的…...

安装Redis Windows版

一、安装Redis Windows版 1.1、下载安装包 官网&#xff1a;https://github.com/microsoftarchive/redis/releases 我分享的链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Lg-b_k02XO6UAXMHxGD0FA?pwdyyds 提取码&#xff1a;yyds 1.2、安装 &#xff08;1&a…...

用 ipset 和 iptables 保护 sip 端口

这里先假定 sip 端口是 5060 和 5080 cat china.sh&#xff0c;and ./china.sh #!/bin/bash apt install -y ipset ipset destroy china ipset create china hash:net maxelem 65536 ipset flush china wget --no-check-certificate -O- http://ftp.apnic.net/apnic/stats/apn…...

日志打印的学习之log4j2(二)进阶案例

日志级别简述&#xff1a; trace追踪&#xff0c;就是程序推进一下&#xff0c;可以写个trace输出debug调试&#xff0c;一般作为最低级别&#xff0c;trace基本不用。info输出重要的信息&#xff0c;使用较多warn警告&#xff0c;有些信息不是错误信息&#xff0c;但也要给程…...

c语言实现2048小游戏

#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h>int best 0 ;// 定义2048游戏的结构体 typedef struct { int martix[16]; // 当前4*4矩阵的数字 int martixPrior[16]; // 上一步的4*4矩阵的数字 int emptyIndex[16…...

159 Linux C++ 通讯架构实战14,epoll 函数代码实战

ngx_epoll_init函数的调用 //&#xff08;3.2&#xff09;ngx_epoll_init函数的调用&#xff08;要在子进程中执行&#xff09; //四章&#xff0c;四节 project1.cpp&#xff1a;nginx中创建worker子进程&#xff1b; //nginx中创建worker子进程 //官方nginx ,一个…...

【鹅厂摸鱼日记(一)】(工作篇)认识八大技术架构

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:重生之我在鹅厂摸鱼⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学习更多知识   &#x1f51d;&#x1f51d; 认识八大架构 1. 前言2. 架构简介&…...

CA根证书——https安全保障的基石

HTTPS通信中&#xff0c;服务器端使用数字证书来证明自己的身份。客户端需要验证服务器发送的证书的真实性。这就需要一个可信的第三方机构&#xff0c;即CA&#xff0c;来颁发和管理证书。CA根证书是证书颁发机构层次结构的顶级证书&#xff0c;客户端信任的所有证书都可以追溯…...

Spark-Scala语言实战(10)

在之前的文章中&#xff0c;我们学习了如何在spark中使用RDD的filter,distinct,intersection三种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#xff0c;谢谢。 Spark-…...

【C++庖丁解牛】高阶数据结构---红黑树详解(万字超详细全面介绍红黑树)

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 前言1.红黑树的概念2.红黑…...

汽车网络安全管理

汽车网络安全管理 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一个人的特殊竞争力&#xff0c;任何消耗你的人和事&#xff0c…...

文本自动粘贴编辑器:支持自动粘贴并筛选手机号码,让信息处理更轻松

在信息时代的浪潮中&#xff0c;文本处理已成为我们日常工作与生活的重要组成部分。无论是商务沟通、社交互动还是个人事务处理&#xff0c;手机号码的筛选与粘贴都显得尤为关键。然而&#xff0c;传统的文本处理方式效率低下、易出错&#xff0c;已无法满足现代人的高效需求。…...

Linux云计算之网络基础9——园区网络架构项目

要求构建大型园区网络架构&#xff0c;方案如下&#xff1a; 园区A 园区c 公司B 要求&#xff1a; 1、A公司园区网络 一台汇聚层三层交换机&#xff0c;两台接入层二层交换机。 出口有一台路由器。 2、A园区有五台服务器。 分别为两台 WEB 服务器&#xff0c;…...

Java 中的 List 集合

文章目录 添加元素获取元素检查元素删除元素修改元素获取列表大小检查列表是否为空清空列表查找元素索引获取列表的子列表 List 是 Java 集合框架中的一个接口&#xff0c;它表示一个有序的集合&#xff08;序列&#xff09;&#xff0c;允许存储重复的元素。List 接口提供了许…...

数据库之DDL操作(数据库,表,字段)

Data Definition Language&#xff0c;数据库定义语言&#xff0c;用来定义数据库对象&#xff08;数据库&#xff0c;表&#xff0c;字段&#xff09; 1.数据库操作 1.1查询所有数据库 show databases; 1.2查询当前数据库 show databases(); 1.3创建数据库 create da…...

5.3.1 配置交换机 SSH 管理和端口安全

5.3.1 实验1:配置交换机基本安全和 SSH管理 1、实验目的 通过本实验可以掌握&#xff1a; 交换机基本安全配置。SSH 的工作原理和 SSH服务端和客户端的配置。 2、实验拓扑 交换机基本安全和 SSH管理实验拓扑如图所示。 交换机基本安全和 SSH管理实验拓扑 3、实验步骤 &a…...

Django--数据库连接

数据库配置 打开mysite/settings.py配置文件&#xff0c;这是整个Django项目的设置中心。Django默认使用SQLite3数据库&#xff0c;因为Python原生支持SQLite3数据库&#xff0c;所以你无须安装任何程序&#xff0c;就可以直接使用它。 下面是默认的数据库配置&#xff1a; …...

CKA 基础操作教程(二)

Kubernetes Deployment 理论学习 Kubernetes Deployment &#xff08;部署&#xff09;是一种 Kubernetes 资源对象&#xff0c;用于定义和管理容器化应用程序的部署和更新。Deployment 提供了一种声明性的方式来定义应用程序的期望状态&#xff0c;并负责确保所需数量的 Pod…...

【SQLServer】快速查看SQL Server中所有数据库中所有表的行数

1.查看某个数据库中每个表的行数 SELECT @@servername as servername, db_name() as databasename, s.name AS schemaname, t.name AS tablename,p.rows AS rowcounts,SUM(a...

Node.js------Express

◆ 能够使用 express.static( ) 快速托管静态资源◆ 能够使用 express 路由精简项目结构◆ 能够使用常见的 express 中间件◆ 能够使用 express 创建API接口◆ 能够在 express 中启用cors跨域资源共享 一.初识Express 1.Express 简介 官方给出的概念&#xff1a;Express 是基…...

CSS - 你实现过0.5px的线吗

难度级别:中级及以上 提问概率:75% 我们知道在网页显示或是网页打印中,像素已经是最小单位了,但在很多时候,即便是最小的1像素,精度却不足以呈现所需的线条精度和细节。因此,为了在网页显示和网页打印中呈现更加细致的线条,为了在视觉…...

hbuilderX创建的uniapp项目转移到vscode

场景&#xff1a;一直使用hbuilderX开发的朋友想转移到vscode获取更好的TypeScript支持&#xff0c;所以想把整个项目目录拖到vscode进行开发&#xff0c;但发现运行不了&#xff0c;提示没有package.json等&#xff0c;并且不能执行pnpm命令 首先&#xff0c;我们先来看一下h…...

宜昌网站改版/东莞搜索排名提升

​微信公众号&#xff1a;推荐广告算法小木屋作者&#xff1a;小凯1. 推荐是要做什么事情&#xff1f;很多人会有一个误区&#xff0c;即推荐就是CTR预估&#xff0c;这也是很多博客/模型/比赛给大家带来的误区&#xff0c;我们今天详细聊聊工业界的推荐。用一句话来解释推荐的…...

黄骅港金沙滩/seo项目经理

1. SDM的主要功能 上一篇说道&#xff0c;SD Core设备主要是封装了底层的细节&#xff0c;为应用层提供唯一的传输接口。SDM&#xff0c;即SD Driver Management&#xff0c;是用来管理SD协议栈里的驱动的&#xff0c;包括硬件控制器驱动和设备类驱动&#xff08;这与USB协议栈…...

云课堂哪个网站做的好/免费的舆情网站app

这次又给大家带来了 RxJS 的相关文章&#xff0c;本文将结合实际项目需求和示例来给大家讲解 RxJS 的优缺点和最佳实践。本文作者&#xff1a;阳羡⚠️注意啦&#xff1a;字节跳动春招开始了&#xff0c;大家ready了吗&#xff1f;欢迎大家找我内推&#xff0c;最快方式进入到部…...

手机网站建设品牌/seo实战密码第三版pdf

2019独角兽企业重金招聘Python工程师标准>>> 在报表中&#xff0c;变量用于值的使用&设置&#xff0c;下表为Stimulsoft Reports的系统变量 &#xff08;“”表示支持&#xff0c;空白表示不支持&#xff09; 。 系统变量WinFormsWPFSilverlightASP.NETSilverli…...

seo怎样新建网站/深圳seo优化排名公司

linux权限及权限管理 (6页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.9 积分Linux权限及权限管理一、 chown:改变文件属主&#xff0c;管理员可以使用 chown [OPTION]... [OWNER][:[…...

搜索引擎优化网站/营销软文模板

软件工程≠计算机科学 首先&#xff0c;这篇文章的英文比上次阅读作业的英文好懂多了 可能是因为上次的多是讲技术的&#xff0c;可以归类为科技英语吧&#xff0c;好多的词都不认识 这次更偏向于议论文吧 We need software that can be put together in a reasonable amount o…...