LeetCode hot100-6

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

这题不会做,三重循环肯定要超时, 写都不想写。

官方解法
前两重循环和暴力解法是一样的。第三重循环有点类似于双指针的感觉。但是我没想通这样写真是O(n2)的时间复杂度吗?感觉还是O(n^3)啊。我理解的双指针可以降低一层时间复杂度是因为两个指针同步往中间走,这样少了一层循环。他这个解法的第二重循环左指针根本就没动,还是和普通循环一样的。然后我就去问了chatGPT,它给了另一种写法,也可以通过。我觉得GPT的才是真正的双指针啊。分别附上官方解法和chatGPT解法

官方解法

class Solution {public List<List<Integer>> threeSum(int[] nums) {int n = nums.length;Arrays.sort(nums);List<List<Integer>> ans = new ArrayList<List<Integer>>();// 枚举 afor (int first = 0; first < n; ++first) {// 需要和上一次枚举的数不相同if (first > 0 && nums[first] == nums[first - 1]) {continue;}// c 对应的指针初始指向数组的最右端int third = n - 1;int target = -nums[first];// 枚举 bfor (int second = first + 1; second < n; ++second) {// 需要和上一次枚举的数不相同if (second > first + 1 && nums[second] == nums[second - 1]) {continue;}// 需要保证 b 的指针在 c 的指针的左侧while (second < third && nums[second] + nums[third] > target) {--third;}// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if (second == third) {break;}if (nums[second] + nums[third] == target) {List<Integer> list = new ArrayList<Integer>();list.add(nums[first]);list.add(nums[second]);list.add(nums[third]);ans.add(list);}}}return ans;}
}作者:力扣官方题解
链接:https://leetcode.cn/problems/3sum/solutions/284681/san-shu-zhi-he-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

chatGPT解法
因为我想不通官方解法的时间复杂度,所以我直接解析GPT解法了。除了第二重循环那,其他大同小异。双指针的关键是判断一个状态后知道指针怎么移动,这里是要凑一个和,根据大小关系来移动。所以需要先排序。三个数,先固定一个数,剩下的就是两数和的问题了。如果小于目标,左指针右移;如果大于目标,右指针左移。等于目标和了就放入结果集,并继续找还有没有其他的两个数能组成目标和。在继续找的过程中还要判断下一个数是不是和当前数相同,如果相同的话要继续走,避免输出重复结果集。

class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> res = new ArrayList<List<Integer>>();Arrays.sort(nums);for (int first = 0; first < nums.length; first++) {if (first > 0 && nums[first] == nums[first - 1]) {continue;}int target = -nums[first];int second = first + 1;int third = nums.length - 1;while (second < third) {int sum = nums[second] + nums[third];if (sum == target) {res.add(Arrays.asList(nums[first], nums[second], nums[third]));while (second < third && nums[second] == nums[second + 1]) {second++;}while (second < third && nums[third] == nums[third - 1]) {third--;}second++;third--;} else if (sum < target) {second++;} else {third--;}}}return res;}
}

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

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

相关文章

基于springboot海滨学院班级回忆录的设计与实现论文

海滨学院班级回忆录 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了海滨学院班级回忆录的开发全过程。通过分析海滨学院班级回忆录管理的不足&#xff0c;创建了一个计算机管理海滨学院班级回忆录的方案。文章…

[three.js]UV动画

背景 好久没接触UV动画这块内容&#xff0c;突然接手了一个涉及这块的开发任务&#xff0c;被打个措手不及。完成任务后&#xff0c;把涉及到的知识点记录下。其实做的就是一个光带。 UV坐标系 UV坐标系是将贴图贴到某个面上时&#xff0c;指定怎么贴合的坐标系。以平面几何…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用&#xff0c;let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏&#xff08;macros&#xff09;&#xff0c;可以…

PSINS工具箱笔记——SINS/GNSS的例程

如图&#xff0c;三个不同维数的SINS/GPS的融合&#xff0c;153表示状态量15维、观测量3维&#xff0c;以此类推。 15维包括&#xff1a;失准角&#xff08;3&#xff09;速度误差&#xff08;3&#xff09;位置误差&#xff08;3&#xff09;陀螺漂移&#xff08;3&#xff…

数字文旅:引领文旅产业迈向全新篇章

每天五分钟讲解一个商业模式&#xff0c;大家好我是啊浩说模式 近年来&#xff0c;数字技术的迅猛发展&#xff0c;尤其是虚拟现实&#xff08;VR&#xff09;、增强现实&#xff08;AR&#xff09;等尖端技术的广泛应用&#xff0c;在旅游业这一娱乐文化产业中&#xff0c;低…

vue + js 项目打包JS、CSS文件自动部署到oss

一、下载oss依赖 npm install webpack-aliyun-oss 或 yarn add webpack-aliyun-oss 二、在vue.config.js中配置文件 const WebpackAliyunOss require("webpack-aliyun-oss");let VUE_APP_BUCKET "xxx"; let VUE_APP_REGION "xx-xxx-xxx";m…

FL Studio20官方中文国内版升级下载2024最新

FL Studio 20&#xff0c;也被众多音乐制作人亲切地称为“水果20”&#xff0c;是一款功能强大的音乐制作软件&#xff0c;它在音乐创作、编曲、录音、混音以及后期制作等方面都有着出色的表现。这款软件不仅适用于专业的音乐制作人&#xff0c;也对初学者非常友好&#xff0c;…

【CSS】关于文字的换行问题

给固定宽度的div中写入一些文字&#xff0c;你会发现文字可能会超出&#xff0c;实例如下&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content&qu…

C++ QT 嘴试题--集锦

1、C的默认函数都有哪些&#xff1f; 在C中&#xff0c;默认函数&#xff08;也称为特殊成员函数&#xff09;是一组在类定义中不需要显式声明和定义的函数。这些函数在特定的情况下会被编译器自动合成&#xff08;隐式生成&#xff09;。以下是C中的默认函数&#xff1a; 默认…

倒计时33天

1.L1-8 静静的推荐 - 2024团体程序设计天梯赛&#xff08;历年真题&#xff09;练习集 (pintia.cn) //碎碎念&#xff1a;主要还是理解题意吧&#xff0c;&#xff0c;为什么每一个字我都认识但合起来就看不懂了呢&#xff0c;&#xff0c;(・∀・(・∀・(・∀・*)&#xff0c…

【QT】重载的信号槽/槽函数做lambda表达式

重载的信号槽 函数指针&#xff1a; int fun(int a,long b) int (*funp)(int, long) fun; 实现回调函数就需要函数指针 信号重载 派生类槽函数发送两个信号 派生类给父类发两个信号 void (SubWidget::*mysigsub)() &SubWidget::sigSub;connect(&subw,mysigsub,t…

Linux命令高效的4个shell替代工具

文章目录 前言1.Top1.1 htop1.2 btop1.3 glances 2.df2.1 duf 3.ls3.1 eza 4.cat4.1 bat 前言 Unix系统发展了好多年了&#xff0c;不论是各开源发行版的linux还是封闭商业化的MacOS&#xff0c;上古流传的古董命令依旧在终端发挥着重要作用&#xff0c;但其实使用体验感觉还是…

2024年Android开发进阶课程,面试一路绿灯Offer拿到手软

职业生涯规划 Android系统的市场地位 Android程序开发的技能成长经验 Android程序员为什么需要学习Html5 Android软件工程师为什么不会被前端替代 为什么小程序无法替代原生开发 为什么Html5无法取代NativeAPP Html5在Android中的应用场景 如何成为一名合格的高级Android程序员…

C及C++每日练习(1)

一.选择&#xff1a; 1.以下for循环的执行次数是&#xff08;&#xff09; for(int x 0, y 0; (y 123) && (x < 4); x); A.是无限循环 B.循环次数不定 C.4次 D.3次 对于循环&#xff0c;其组成部分可以四个部分&#xff1a; for(初始化;循环进行条件;调整) …

【QA-SYSTEMS】CANTATA-解决Jenkins中build Cantata报错

【更多软件使用问题请点击亿道电子官方网站查询】 1、 文档目标 解决Jenkins中build Cantata测试项目报找不到license server的错误。 2、 问题场景 在Jenkins中build Cantata测试项目&#xff0c;报错“Failed to figure out the license server correctly”。 3、软硬件环…

Numpy教程

文章目录 数组基础文件与字符串多项式分布实战 Numpy绝对可以说是支撑Python地位的最重要的包了&#xff0c;几乎所有能叫出名的Python计算库&#xff0c;都不可避免地调用了Numpy&#xff0c;Numpy官网也列出了一些&#xff0c;大致如下图这样&#xff0c;在科学计算领域&…

Android 13.0 kenel中修改rom系统内部存储的大小

1. 前言 在13.0的系统rom产品开发定制中,在对一些产品开发中的配置需求方面,由于在产品后续订单中,有些产品是出口的,但是硬件方面已经定板,时间比较仓促,所以 就需要软件方面在rom内部存储的大小方面作假,修改rom真实的大小容量,所以就需要在kenel驱动部分来修改这部分…

Spring事务管理与模板对象

1.事务管理 1.事务回顾 事务指数据库中多个操作合并在一起形成的操作序列 事务的作用 当数据库操作序列中个别操作失败时&#xff0c;提供一种方式使数据库状态恢复到正常状态&#xff08;A&#xff09;&#xff0c;保障数据库即使在异常状态下仍能保持数据一致性&#xff…

【探索AI】二十七-计算机视觉(二)图像处理基础

图像处理基础 概述 数字图像表示 数字图像是由像素&#xff08;Pixels&#xff09;组成的&#xff0c;每个像素都有一个或多个数值&#xff0c;这些数值代表了该像素在图像中的颜色和亮度信息。数字图像可以看作是一个二维数组&#xff0c;其中每个元素对应图像中的一个像素…

android开发教程百度网盘,高并发系统基础篇

展望未来 操作系统 移动操作系统的演变过程&#xff0c;从按键交互的塞班功能机到触摸屏交互的Android/IOS智能机&#xff0c;从小屏幕手机到全面屏、刘海屏、水滴屏。任何系统无非干两件事&#xff1a;输入和输出&#xff0c;接收到外部输入信号后经过操作系统处理后输出信息…