【leetcode hot 100 15】三数之和

一、两数之和的扩展

class Solution {public List<List<Integer>> threeSum(int[] nums) {// 将得到的结果存入Set中,保证不重复Set<List<Integer>> set = new HashSet<>();// 模拟两数之和,作为第一个循环中的内容for(int i=0; i<nums.length; i++){// 用map来存<complement,id>键值对Map<Integer,Integer> map = new HashMap<>();for(int j=i+1; j<nums.length; j++){int complement = -nums[i]-nums[j];if(map.containsKey(complement)){// 满足要求Integer[] tmp = new Integer[]{nums[i],nums[j],complement};Arrays.sort(tmp);  // 排序 避免重复set.add(Arrays.asList(tmp));}map.put(nums[j],j);}}return new ArrayList<>(set);}
}

注意:

  • 关于数组的操作在Arrays(注意有s)中,例如:排序Arrays.sort(tmp)->tmp直接变,无需返回值
  • 数组与集合相互转换:Arrays.asList()(数组->list) list.toArray()(list->数组)
  • 集合与集合相互转换:new ArrayList<>(set)(set->list) new HashSet<>(list)(list->set)

错误原因:超出时间限制

在这里插入图片描述

双指针解法:先用一个 for 循环遍历数组,对于每个数字,使用双指针在数组的剩余部分查找和为 0 的另外两个元素。

class Solution {public List<List<Integer>> threeSum(int[] nums) {// 先申请一个listList<List<Integer>> res = new LinkedList<>();// 排序nums,便于消除重复的数Arrays.sort(nums);// 循环每一个num,在后面用两个指针找满足需求的数for(int i=0; i<nums.length-2; i++){// 这里nums.length-2,因为后面还需要提取两个数->提高效率int left=i+1, right=nums.length-1, complement=-nums[i];if(i==0 || i>0 && nums[i]!=nums[i-1]){// 要保证nums[i]是第一个不一样的数,避免重复while(left<right){// 循环寻找两个数if(complement == nums[right]+nums[left]){// 找到三个数Integer[] tmp=new Integer[]{nums[i],nums[right],nums[left]};res.add(Arrays.asList(tmp));// 保证后面两个数再次取到的数不重复 while(left<right && nums[left]==nums[left+1]){left++;}while(left<right && nums[right]==nums[right-1]){right--;}left++;right--;}else if(complement > nums[right]+nums[left]){// 要一个大一点的数left++;}else{// 要一个小一点的数right--;}}}}return res;}
}

注意:

  • LinkedList中有ed;不存在HashlList
  • if(complement == nums[right]+nums[left])判断后,还要判断if(complement > nums[right]+nums[left]),确保后面有
  • for内还有while循环,用于循环后面两个数
  • Arrays.asList(1,2,3); or Integer[] tmp = new Integer[]{1,2,3}; Arrays.asList(tmp);

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

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

相关文章

Cesium高级开发教程之四十三:缓冲区分析#线

一、简介 基本概念:线缓冲区分析是指以 Cesium 中的线要素(如道路、河流等)为基础,在其两侧创建一定宽度的带状区域。例如,在地图上有一条河流的线数据,通过线缓冲区分析,可以得到河流两侧一定范围内的缓冲区域,用于表示河流的影响范围或进行相关的分析。实现原理:在 …

制造执行系统(MES)应用分析

全文概述 本文详细阐述了制造执行系统(MES)应用研究的主要内容,包括MES的定义、市场需求、企业选型与实施、应用现状、面临的挑战以及未来发展趋势。文章中基于广泛的行业调研,提供了详实的分析和见解。首先介绍了MES的基本概念和重要性,随后探讨了MES市场的投资、需求和选…

使用 VSCode 代替 BeyondStudio for NXP 开发 JN 5169

使用 VSCode 代替 BeyondStudio for NXP 开发 JN 5169 一、安装 VSCode二、搭建 NXP JN5169 ZigBee 3.0 开发环境和下载示例工程三、配置 VSCode1、配置环境变量 MYSYS_HOME2、VSCode 安装以下插件3、VSCode 配置头文件路径 四、编译工程1、JN-AN-1219 有 6 个构建选项2、修改 …

Spring集成 Spring AI + DeepSeek

当 Spring Boot 与 DeepSeek 相遇&#xff0c;两者的结合为开发 AI 应用程序带来了前所未有的机遇。Spring Boot 的强大功能和便捷性&#xff0c;使得开发者能够快速搭建稳定的后端服务&#xff0c;而 DeepSeek 的先进大语言模型则为应用赋予了强大的智能交互和处理能力。通过将…

CentOS中shell脚本对多台机器执行下载安装

1.建立免密ssh连接 详情见这篇&#xff1a; CentOS建立ssh免密连接&#xff08;含流程剖析&#xff09;-CSDN博客 2.脚本编写 我这里只是简单写了个demo进行演示&#xff0c;如果服务器很多可以先暂存成文件再逐行读取host进行连接并执行命令 用node1去ssh连接node2和node…

华为AP 4050DN-HD的FIT AP模式改为FAT AP,家用FAT基本配置

在某鱼买了两台华为AP 4050DN-HD , AP是二手的 , 在AC上上过线 , 所以就不能开机自选为FIP模式了 我没有AC无线控制器 , 就是买一个自己玩 , AP又是FIT瘦AP模式 ,所以我就想把AP的瘦AP模式改为FAT胖AP模式 1. 准备工作 1.1下载好对应软件&#xff0c;进入到 企业业务网站去下…

C++ 中的reduce函数使用指南

本文与reduce函数学习的知识深度很浅&#xff0c;主要是记录一下使用reduce来简化代码&#xff0c;高效解题。 参考资料&#xff1a; https://cppreference.cn/w/cpp/algorithm/reduce 1. reduce 函数概述 reduce 函数类似于 accumulate&#xff0c;但它允许更灵活的并行化和…

stm32四种方式精密控制步进电机

在搭建完clion的开发环境后&#xff0c;我决定重写之前的项目并优化完善&#xff0c;争取做出完全可落地的东西&#xff0c;也结合要写的论文内容一同学习下去。 因此&#xff0c;首当其冲的就是回到步进电机控制领域&#xff0c;把之前使用中断溢出进行步进电机控制的方案进行…

HTML——前端基础1

目录 前端概述 前端能做的事情​编辑 两步完成一个网页程序 前端工具的选择与安装 HTML HTML5介绍 HTML5的DOCTYPE声明 HTML基本骨架 文字标签 标题之标签 标签之段落、换行、水平线 标签之图片 标签之超文本链接 标签之文本 列表标签之有序列表 列表标签之无序…

【QT问题】Ubantu环境下解决已经下载好的qt怎么添加或卸载其他组件

1、找到自己qt的安装目录->双击打开MaintenanceTool.exe 2、点击next进去&#xff0c;此时需要登录qt账户&#xff08;如果没有去官网注册一个&#xff0c;很快且免费&#xff09; 我这里随便填的账号&#xff0c;如果是正确的下面next就能够点击。 这里随便提一下&#xf…

TaskBuilder设置排序条件

在整个向导的最后一步&#xff0c;可以设置是否按指定字段的值对查询结果进行排序&#xff0c;支持正序和倒序两种排序方式。如果没有设置任何排序字段&#xff0c;则默认按数据库里现有数据记录的实际存储的先后顺序排序。如果设置了多个排序条件&#xff0c;则按这些条件从上…

Taylor龙哥库塔。各种稳定性

——Taylor 龙额库塔 需要利用&#xff1a; 1.k1f 2.b21a1 3.k1fuffu | | 稳定区域 | | | | | | BDFq 方法是 A(φq)-稳定的&#xff0c;其中 φ1 φ2 90◦, φ3 ≈86.03◦, φ4 ≈73.35◦, φ5 ≈51.84◦, 和 φ6 ≈17.84◦; 参见 2 3. | | | WSBDFq 方法是 A( ˜ φ…

AI如何通过大数据分析提升制造效率和决策智能化

人工智能&#xff08;AI&#xff09;与大数据技术的融合&#xff0c;不仅重新定义了生产流程&#xff0c;更让企业实现了从“经验驱动”到“数据智能驱动”的跨越式升级。 从“模糊经验”到“精准洞察”​​ 传统制造业依赖人工经验制定生产计划&#xff0c;但面对复杂多变的市…

Windows docker下载minio出现“Using default tag: latestError response from daemon”

Windows docker下载minio出现 Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": context deadline exceeded 此类情况&#xff0c;一般为镜像地址问题。 {"registry-mirrors": ["https://docker.re…

【前端基础】Day 4 CSS盒子模型

目录 1. 盒子模型 1.1 盒子模型布局 1.2 盒子模型组成 1.3 边框 1.4 表格细线边框 1.5 边框会影响盒子实际大小 1.6 内边距 1.7 外边距 1.8 外边距合并 1.9 清除内外边距 2. PS基本操作 3. 综合案例 3.1 案例1 3.2 案例2-快报模块 4. 圆角边框 5. 盒子阴影 6…

DeepSeek R1 + 飞书机器人实现AI智能助手

效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1&#xff0c;项目为sanic和redis实现&#xff0c;利用httpx异步处理流式响应&#xff0c;同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…

Go红队开发—并发编程

文章目录 并发编程go协程chan通道无缓冲通道有缓冲通道创建⽆缓冲和缓冲通道 等协程sync.WaitGroup同步Runtime包Gosched()Goexit() 区别 同步变量sync.Mutex互斥锁atomic原子变量 SelectTicker定时器控制并发数量核心机制 并发编程阶段练习重要的细节端口扫描股票监控 并发编程…

一键导出数据库表到Excel

工作中&#xff0c;我们经常需要将数据库表导出到Excel&#xff0c;通常我们会用数据库编辑器之类的工具提供的导出功能来导出&#xff0c;但是它们的导出功能通常都比较简单。 这篇文章将介绍一种简单易用并且功能强大的导出方法。 新增导出 打开的卢导表工具&#xff0c;新…

《深度学习实战》第4集:Transformer 架构与自然语言处理(NLP)

《深度学习实战》第4集&#xff1a;Transformer 架构与自然语言处理&#xff08;NLP&#xff09; 在自然语言处理&#xff08;NLP&#xff09;领域&#xff0c;Transformer 架构的出现彻底改变了传统的序列建模方法。它不仅成为现代 NLP 的核心&#xff0c;还推动了诸如 BERT、…

jeecgboot项目idea启动项目(二)

文章目录 一、IntelliJ IDEA1.安装2.配置maven3.配置jdk 二、IDEA启动项目三、IDEA2024.1.4破解 一、IntelliJ IDEA ‌IntelliJ IDEA是一款由JetBrains开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;主要用于Java和Kotlin编程&#xff0c;但也支持多种其他编程语…