15. 三数之和
给你一个整数数组 nums
,判断是否存在三元组 [nums[i], nums[j], nums[k]]
满足 i != j
、i != k
且 j != 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
解题思路:
1.排序数组:首先对数组进行排序,这样可以方便地使用双指针技术来寻找三元组,并且有助于跳过重复的元素。
2. 固定一个元素,使用双指针寻找其他两个元素:遍历数组,对于每个元素nums[i],使用双指针left和right分别指向i+1和数组末尾,寻找满足nums[i] + nums[left] + nums[right] == 0的三元组。
3. 跳过重复元素:在遍历过程中,如果遇到重复的元素,跳过它们以避免重复的三元组。
4. 存储结果:每当找到满足条件的三元组时,将其存储到结果列表中。
// 比较函数,用于qsort排序
int compare(const void *a, const void *b) {return (*(int*)a - *(int*)b); // 升序排序
}// 三数之和函数
int** threeSum(int* nums, int numsSize, int* returnSize, int** returnColumnSizes) {// 首先对数组进行排序(升序)qsort(nums, numsSize, sizeof(int), compare);// 分配足够大的空间来存储结果(最坏情况下可能有n^2个三元组)int maxTriplets = numsSize * numsSize;int** result = (int**)malloc(maxTriplets * sizeof(int*)); // 存储结果数组*returnColumnSizes = (int*)malloc(maxTriplets * sizeof(int)); // 存储每个结果的大小*returnSize = 0; // 初始化返回结果的数量为0// 遍历数组,i作为第一个数的索引for (int i = 0; i < numsSize - 2; i++) {// 跳过重复的nums[i](避免重复三元组)if (i > 0 && nums[i] == nums[i - 1]) {continue;}// 设置双指针:left从i+1开始,right从末尾开始int left = i + 1;int right = numsSize - 1;// 双指针遍历while (left < right) {// 计算当前三个数的和int sum = nums[i] + nums[left] + nums[right];if (sum == 0) {// 找到满足条件的三元组result[*returnSize] = (int*)malloc(3 * sizeof(int)); // 分配内存存储三元组result[*returnSize][0] = nums[i]; // 第一个数result[*returnSize][1] = nums[left]; // 第二个数result[*returnSize][2] = nums[right]; // 第三个数(*returnColumnSizes)[*returnSize] = 3; // 设置该结果的大小为3(*returnSize)++; // 增加结果计数// 跳过重复的nums[left]和nums[right](避免重复三元组)while (left < right && nums[left] == nums[left + 1]) {left++;}while (left < right && nums[right] == nums[right - 1]) {right--;}// 移动指针继续寻找left++;right--;} else if (sum < 0) {// 和太小,左指针右移(因为数组已排序)left++;} else {// 和太大,右指针左移right--;}}}return result; // 返回结果数组
}
本次实验实现了寻找数组中所有和为0且不重复的三元组的算法。通过排序数组和使用双指针技术,我们有效地减少了时间复杂度,确保算法在O(n²)时间内完成。关键步骤包括:
1. 数组排序:首先对输入数组进行升序排序,为双指针法创造条件。
2. 双指针遍历:固定一个元素后,使用双指针在剩余数组中寻找满足条件的另外两个元素。
3. 去重处理:在遍历过程中跳过重复元素,避免生成重复的三元组。
4. 动态内存管理:合理分配和释放内存,确保程序运行效率。
相关文章:
15. 三数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k ,同时还满足 nums[i] nums[j] nums[k] 0 。请你返回所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1&…...
0328-内存图2
是否正确待定: Perso类 package com.qc.内存图2;public class Perso {public int age;public String name;public static int flag;public void m1() {}public static void m2() {}Overridepublic String toString() {return "Perso [age" age "…...
最接近的三数之和
给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。 返回这三个数的和。 假定每组输入只存在恰好一个解。 示例 1: 输入:nums [-1,2,1,-4], target 1 输出:…...
d2025328
一、sql-判断三角形 610. 判断三角形 - 力扣(LeetCode) 用一下if加上判断条件 select x,y,z,if(xy > z and xz > y and yz > x and x-y < z and x-z < y and y-z < x,Yes,No) as triangle from Triangle 二、按照分类统计薪水 190…...
初识MySQl · 内置函数
目录 前言: 日期类函数 字符串函数 数学类函数 其他函数 前言: 在前文的学习我们已经简单了解了部分函数,比如count()函数什么的,今天我们主要是笼统的学习一下MySQL中的函数,仅仅从使用的角度来学习,…...
(C语言)指针运算 习题练习1.2(压轴难题)
在上一张已经练习了三道习题,小试牛刀了,那么在本章在来几题,练练手。(习题三是压轴难题) 习题一 int main() {int aa[2][5] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };int* ptr1 (int*)(&aa 1);int* ptr2 (int*)…...
视频AI赋能水利行业生态治理,水电站大坝漂浮物实时监测与智能预警方案
水电站大坝周边水域垃圾漂浮物不仅影响水质,还可能对大坝设施运行、水生态环境造成威胁。传统依靠人工巡检的方式效率低、存在监测盲区,难以实时全面地掌握漂浮物情况。借助EasyCVR视频汇聚平台与TSINGSEE青犀AI算法中台构建智能化监测方案,能…...
方阵幂次(矩阵快速幂)
#include <bits/stdc.h> using namespace std;int n; vector<vector<int>> fuc(vector<vector<int>> a,vector<vector<int>> b){ // 矩阵乘法函数vector<vector<int>> f(n,vector<int>(n));for(int i0;i<n;i){…...
【Uni-App】嵌入悬浮球全局组件的详细教程和防踩坑点
一、前言 近期接到一个业务需求是为为h5页面嵌入悬浮球,而且还得是全局化(这样所有页面就可以看见了),在开发的过程中也遇到一些坑,在此和大家一起学习、讨论。 二、准备工作 下载悬浮球组件代码 悬浮球 - DCloud …...
第十六章 图
1.为什么要有图 前面学了线性表和树 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时,这里我们就用到了图 import java.util.ArrayList; import java.util.Arrays;public class Graph {private int[][]edg…...
Ubuntu 系统无法远程连接?完整排查指南与解决方案
远程连接 Ubuntu 系统是服务器管理和开发中的常见需求,但有时会遇到无法连接的问题。本文整理常见原因及解决方法,涵盖 SSH 服务配置、防火墙规则、网络设置等关键环节,助您快速定位问题。 检查 SSH 服务状态 SSH(Secure Shell) 是远程连接的核心服务。若未安装或未运行,…...
将网络安全和第三方风险管理与业务目标相结合
在网络安全风险领域,我们经常遇到与企业语言不通的问题。这可能导致网络安全风险管理计划得不到支持。当发现网络安全风险时,困难在于以符合组织语言和目标的方式来表达它。 第三方风险属于另一个灰色地带。在组织内部,许多利益相关者&#…...
加油站小程序实战教程02宫格导航
目录 引言1 应用创建2 搭建页面布局3 大模型生成图标最终效果 引言 在《加油站小程序实战教程01》中我们详细介绍了站点基本信息数据维护功能的搭建。有了数据之后就需要考虑小程序展示部分该如何搭建,本篇我们介绍一下应用的创建、页面布局以及数据绑定的过程。 …...
es6的箭头函数与普通函数的区别,箭头函数的this通常指向哪里,箭头函数可以用作构造函数吗?
ES6 的箭头函数与普通函数的区别 箭头函数(Arrow Function)和普通函数有一些重要的区别,主要体现在以下几个方面: 1. 语法简洁性 - 箭头函数的语法更简洁,不需要使用 function 关键字。 - 普通函数需要使用 functi…...
工作记录 2017-03-10
工作记录 2017-03-10 序号 工作 相关人员 1 修改邮件上的问题。 更新RD服务器。 郝 更新的问题 1、修改了payment detail和patient insurance的health plan的输入方式。 2、new payment detail时,增加了allowable的处理。 3、选择payer的窗体,增…...
如何一键安装所有Python项目的依赖!
在开发项目时,常常需要在多个环境中安装各种依赖。对开发者来说,每次手动一个个安装这些依赖是不是很麻烦?😅 其实有个超简单的办法!只需要一个脚本,就能快速解决问题!💡 这就是我们…...
linux的基础命令
目录 1. 文件和目录操作 ls ls -l ls -a pwd touch haha.txt mkdir 113 cd . 和 cd .. cd ~ echo "hello world" >> test.c cat test.txt mv rm 2. 压缩与解压 zip test.zip test.c unzip test.zip -d /root/113 tar czf lesson4.tgz less…...
Redis数据持久化机制 + Go语言读写Redis各种类型值
Redis(Remote Dictionary Server)作为高性能的键值存储系统,凭借其丰富的数据类型和原子性操作,成为现代分布式系统中不可或缺的组件。 1、Redis支持的数据类型 Redis支持的数据类型可归纳为以下9类: String&#x…...
HackMyVM-Demons
目录 信息搜集漏洞利用提权 信息搜集 主机发现 ┌──(kali㉿kali)-[~] └─$ nmap -sn 192.168.21.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2025-03-27 23:38 EDT Nmap scan report for 192.168.21.1 (192.168.21.1) Host is up (0.0016s latency). MAC Add…...
Python Random 模块使用完全指南
一、模块基础与核心功能 1. 模块导入与初始化 所有随机操作需先导入模块: import random # 标准导入方式 import random as rd # 别名导入(推荐)核心原理:默认基于梅森旋转算法生成伪随机数,可通过random.seed()设…...
前端技术有哪些
一、基础技术 HTML 页面结构标记语言,最新版本为 HTML5。 CSS 样式设计语言,扩展技术包括: CSS 预处理器:Sass、Less、Stylus。CSS 框架:Bootstrap、Tailwind CSS、Bulma。原子化 CSS:Windi CSS、UnoCSS。…...
Python二分查找【清晰易懂】
1. 二分查找是什么? 想象你在玩“猜数字”游戏: 对方心里想一个 1~100 的数字,你每次猜一个数,对方会告诉你是“大了”还是“小了”。 最快的方法:每次都猜中间的数!比如第一次猜50,如果大了&…...
【数据分享】基于联合国城市化程度框架的全球城市边界数据集(免费获取/Shp格式)
在全球城市化进程不断加快的今天,如何精准定义和测量“城市”成为关键问题。不同国家和机构采用不同的标准,导致全球城市化水平的统计结果存在较大差异。同时,由于数据来源分散、标准不统一,获取一套完整、可比的全球城市边界数据…...
ExpTimerApcRoutine函数分析之作用是ActiveTimerListHead里面移除定时器_etimer
第一部分: VOID ExpTimerApcRoutine ( IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2 ) /* Routine Description: This function is the special …...
Linux环境下安装部署Docker
windows下连接Linux: 打开终端: //ssh远程连接 ssh root192.168.xx.xx//输入账号密码 root192.168.xx.xxs password: ssh连接成功! 安装Docker: //安装Docker yum install -y yum-utils device-mapper-persistent-data lvm2 …...
深度赋能!北京智和信通融合DeepSeek,解锁智能运维无限可能
在数字化飞速发展的今天,传统运维模式面临着设备规模激增、故障复杂度攀升、人工响应滞后等多重挑战。随着DeepSeek、腾讯元宝等AI大模型的兴起,为传统运维模式带来了新的变革。 北京智和信通基于DeepSeek大模型技术,将AI和运维场景深度融合&…...
mysql死锁排查解决
今天数据库突然报错[40001][1213] Deadlock found when trying to get lock; try restarting transaction 一看就是死锁 阿里实列会显示类似sql:UPDATE goods SET num num - 1 WHERE id2 AND num > 1; 一看sql这不是扣减库存操作吗? 为什么这sql会出现死锁??…...
Linux | i.MX6ULL 终结者学习指南(1)
01 一 光盘资料介绍 跟我一起成为嵌入式Linux大佬,开干 02 接下来我们一起学习。 01_开发及烧写工具 (Linux 镜像烧写工具、交叉编译器、裸机镜像制作工具) 1.交叉编译器 (ARM 交叉编译器) 2.裸机镜像制作…...
NX二次开发刻字功能——布尔运算
刻字功能在经历、创建文本、拉伸功能以后就剩下布尔运算了。布尔运算的目的就是实现文本时凸还是凹。这部分内容很简单。 1、首先识别布尔运算的类型,我这里用到一个枚举类型的选项,凸就是布尔求和,凹就是布尔求差。 2、其放置位置为创建拉伸…...
SpringAI与JBoltAI深度对比:从工具集到企业级AI开发范式的跃迁
一、Java生态下大模型开发的困境与需求 技术公司的能力断层 多数企业缺乏将Java与大模型结合的标准开发范式,停留在碎片化工具使用阶段。 大模型应用需要全生命周期管理能力,而不仅仅是API调用。 工具集的局限性 SpringAI作为工具集的定位࿱…...
JAVASCRIPT 异步函数:底层原理,fetch,promise实例方法then, catich
什么是异步 所谓“异步函数”通常指这样一种函数:它在编写时会调用异步 API 并在某个时机(可能是定时、可能是等待网络、也可能是其他操作)把结果“异步”地返回。而“回调函数”是异步函数执行完成后会去调用的函数,也就是“等待…...
docker run -p 5000:5000 my-flask-app
docker run -p 5000:5000 my-flask-app代码的意思是: 运行 my-flask-app 容器,并把 Flask 服务器的 5000 端口映射到本机的 5000 端口。 拆解解释 docker run -p 5000:5000 my-flask-app✅ docker run → 运行一个 Docker 容器 ✅ -p 5000:5000 → 端口…...
头文件“stm32f10x.h“与 “stdint.h“和“stdio.h“之间的关系
目录 一、#include "stm32f10x.h"包含#include "stdint"吗? 1、直接包含情况 2、间接依赖情况 3、实际使用建议 二、#include "stm32f10x.h"包含#include "stdio.h"吗? 1、头文件功能与设计目的差异 2、实…...
前端常问的宏观“大”问题详解
HTML5新特性包括那些 HTML5新特性详解 HTML5作为现代网页开发的核心标准,引入了多项革新特性,涵盖语义化标签、多媒体支持、表单增强及新API等,显著提升了网页功能与开发效率。以下是其核心新特性的分类总结: 一、语义化标签 HTML5新增了语义化布局标签,替代传统无意义…...
华为机试练习
挑7_牛客题霸_牛客网 整数转换为字符串String numStr String.valueOf(str); String有一个contains方法,查看是否包含字符串 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main {public static void main(String…...
压力测试未覆盖边界条件的后果有哪些
压力测试未覆盖边界条件可能导致的主要后果包括产品稳定性下降、潜在故障隐患未被识别、用户体验下降及企业信誉受损。其中,最直接且明显的后果是产品稳定性下降。产品在极限或边界条件下通常最容易暴露缺陷,如果压力测试未充分覆盖这些边界条件…...
编程技术水平横向和垂直发展的抉择全方位分析
文章目录 摘要引言一、横向发展的全面分析二、垂直发展的深度剖析三、发展路径的决策模型四、两者结合的协同策略五、行业应用与趋势分析六、结论 摘要 本文全面分析了编程技术发展中横向扩展与垂直深化的战略抉择。通过系统比较两种发展路径的特点、优势、劣势及应用场景&…...
Docker技术系列文章,第十篇——Docker 集群与编排(以 Kubernetes 为例)
本篇内容作为docker系列的收尾之作,之所以选择本篇作为收尾之作,是因为小编觉得 这十篇内容已经满足基础的docker应用中的需求了;关注小编,小编后期还会不定时的更新docker相关的知识点。希望诸君共同努力,都能收获的愈…...
iPhone mini,永远再见了
世界属于多数派,尽管有极少数人对 iPhone mini 情有独钟,但因为销量惨淡,iPhone mini 还是逃不开停产的命运。 据 Counterpoint 的数据,iPhone 12/13 mini 两代机型,仅占同期 iPhone 销量的 5%。 因为是小屏手机&…...
第五周日志-重新学汇编(2)
机器语言 汇编语言(直接在硬件上工作——硬件系统结构): 1.机器语言 每一种微处理器硬件设计和内部结构不同(决定了电信号不同,进而需要不同的机器指令) #早期通过纸带机/卡片机输入计算机,进行运算 2…...
Qt正则表达式QRegularExpression
在 Qt 中,正则表达式是处理文本的强大工具,它能够帮助我们匹配、搜索和替换特定的字符串模式。自 Qt 5 起,QRegularExpression 类提供了对 ECMAScript 标准的正则表达式支持,这使得它在处理各种复杂的字符串任务时变得更加高效和灵…...
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程(附带图谱表格更好对比理解)
Java-servlet(十)使用过滤器,请求调度程序和Servlet线程 前言一、Servlet 间通信(了解即可)二、Servlet 请求处理:getAttribute 和 getParameter 的区别与应用1.getAttribute 方法2.getParameter 方法 三、…...
【环路补偿】环路补偿的九种类型-mathcad计算书免费下载
环路补偿的九种类型-mathcad计算书免费下载 通过网盘分享的文件:环路补偿的9种类型.xmcd 链接: https://pan.baidu.com/s/1QIwsKsbv-WyyYgGc4P1eqg?pwd4sar 提取码: 4sar --来自百度网盘超级会员v3的分享...
【极速版 -- 大模型入门到进阶】LORA:大模型轻量级微调
文章目录 🌊 有没有低成本的方法微调大模型?🌊 LoRA 的核心思想🌊 LoRA 的初始化和 r r r 的值设定🌊 LoRA 实战:LoraConfig参数详解 论文指路:LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE M…...
六十天前端强化训练之第三十二天之Babel 转译配置大师级深度讲解
欢迎来到编程星辰海的博客讲解 看完可以给一个免费的三连吗,谢谢大佬! 目录 一、核心概念与知识体系详解 1. Babel 工作原理全景解析 二、完整配置方案(带详细注释) 1. 进阶版 .babelrc 配置 2. Webpack 集成配置(…...
nginx部署前端项目(linux、docker)
引言 在CentOS 7系统上使用docker安装nginx,使用nginx部署一个由Vue开发、打包的项目 docker安装nginx 这里不多赘述,直接上docker-compose.yml代码 nginx:container_name: nginximage: nginx:1.27.2ports:- "80:80"volumes:- /docker/ngin…...
支付页面安全与E-Skimming防护----浅谈PCI DSS v4.0.1要求6.4.3与11.6.1的实施
关键词:支付页面安全、E-Skimming、PCI DSS v4.0.1、第三方脚本、风险管理、持卡人数据、数据安全、第三方服务提供商、TPSP、内容安全、网页监控、恶意脚本攻击 本文为atsec和作者技术共享类文章,旨在共同探讨信息安全的相关话题。转载请注明ÿ…...
配置完nfs后vmware虚拟机下ubuntu/无法联网问题
背景:我在用imx6ull配置完nfs和tftp后,哪怕还原了设置也连不上网,网上的教程都没用,什么配置路由,配置ip,配置什么用户文件,都没用,最后试出来了一个方法,解决问题。 方法…...
【含文档+PPT+源码】基于大数据的交通流量预测系统
项目介绍 本课程演示的是一款基于大数据的交通流量预测系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 包含:项目源码、项目文档、数据库脚本、软件工具等所有资料 带你从零开始部署运行本套系统 该项目附带的源码…...
关于Qt的各类问题
目录 1、问题:Qt中文乱码 2、问题:启动时避免ComBox控件出现默认值 博客会不定期的更新各种Qt开发的Bug与解决方法,敬请关注! 1、问题:Qt中文乱码 问题描述:我在设置标题时出现了中文乱码 this->setWindowTitle("算法…...