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

【算法刷题】Day10

文章目录

  • 15. 三数之和
    • 题干:
    • 算法原理:
      • 1、排序 + 暴力枚举 + 利用set 去重
      • 2、排序 + 双指针
    • 代码:
  • 18. 18. 四数之和
    • 题干:
    • 算法原理:
      • 1、排序 + 暴力枚举 + 利用set 去重
      • 2、排序 + 双指针
    • 代码:

15. 三数之和

在这里插入图片描述
在这里插入图片描述
原题链接

题干:

存在一个三元组,满足
i != j、i != k 且 j != k
nums[i] + nums[j] + nums[k] == 0

算法原理:

1、排序 + 暴力枚举 + 利用set 去重

这个方法就是先循环,用几个 for 循环暴力枚举,然后放到 HashSet 中去重
但是这个方法时间复杂度很高,达到了O(N3)

2、排序 + 双指针

(1)排序
这里进行排序是为了从前向后遍历的时候,可以更好的用双指针进行操作
在这里插入图片描述
(2)固定一个数 a
这个 a 必须要大于等于 0,因为题目要求三数相加等于 0

(3)在该数后面的区间内,利用“双指针算法”快速找到两个数的和等于 -a 即可
在这里插入图片描述

(4)处理细节问题

  • 不要漏任何一个组合
    在 left 和 right 向中间走的时候,找到一个数等于固定的数的负数,不能停下,继续缩小区间,寻找下一个

  • 去重
    由于题目要求,不能返回相同的数组,所以要求去重
    这样就可以找到一种结果之后,left 和 right 指针要跳过重复元素
    当使用完一次双指正算法之后,也要跳过重复元素
    但要注意避免越界!!!
    在这里插入图片描述

代码:

   public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ret = new ArrayList<>();//1.排序Arrays.sort(nums);int n = nums.length;//2.利用双指针for (int i = 0; i < n;) {int left = i + 1;int right = n - 1;int target = -nums[i];if (nums[i] > 0) {break;}while (left < right) {int sum = nums[left] + nums[right];if (sum < target) {left++;}else if (sum > target) {right--;}else {ret.add(new ArrayList<Integer>(Arrays.asList(nums[i],nums[left],nums[right])));//缩小区间继续寻找left++;right--;while (left < right && nums[left] == nums[left-1]) {left++;}while (left < right && nums[right] == nums[right+1]) {right--;}}}i++;while (i < n && nums[i] == nums[i-1]) {i++;}}return ret;}

在这里插入图片描述

18. 18. 四数之和

在这里插入图片描述

题干:

这道题跟上面的三数之和非常相似,因此下面的解题思路也是非常相似

nums[a] + nums[b] + nums[c] + nums[d] == target

算法原理:

1、排序 + 暴力枚举 + 利用set 去重

这个算法依然是超时的,我们主要看第二种

2、排序 + 双指针

(1)排序

(2)在 a 后面的区间内,利用“三数之和”找到三个数(和上面题的方法一样),使这三个数的和等于 target - a

(3)处理细节问题

  • 不漏
  • 去重

代码:

public List<List<Integer>> fourSum(int[] nums, int target) {List<List<Integer>> ret = new ArrayList<>();int n = nums.length;//1.排序Arrays.sort(nums);//2.双指针for (int i = 0; i < n;) {long t1 = (long)target - nums[i];for (int j = i + 1; j < n;) {long t2 = t1 - nums[j];int left = j + 1;int right = n - 1;while (left < right) {int sum = nums[left] + nums[right];if (sum > t2) {right--;}else if (sum < t2) {left++;}else {ret.add(Arrays.asList(nums[i],nums[j],nums[left],nums[right]));left++;right--;while (left < right && nums[left] == nums[left-1]) {left++;}while (left < right && nums[right] == nums[right+1]) {right--;}}}j++;while (j < n && nums[j] == nums[j-1]) {j++;}}i++;while (i < n && nums[i] == nums[i-1]) {i++;}}return ret;}

在这里插入图片描述

相关文章:

【算法刷题】Day10

文章目录 15. 三数之和题干&#xff1a;算法原理&#xff1a;1、排序 暴力枚举 利用set 去重2、排序 双指针 代码&#xff1a; 18. 18. 四数之和题干&#xff1a;算法原理&#xff1a;1、排序 暴力枚举 利用set 去重2、排序 双指针 代码&#xff1a; 15. 三数之和 原题链…...

SAP 如何检查已安装的SAP UI5 版本

第一个方法是直接从FLP中查看 但是部分高版本的FLP中没有这个about&#xff0c; 那么在当前界面可以使用&#xff1a;CTRL ALT SHIFT S 查看当前版本 根据此版本&#xff0c;去进行你的UI5的开发吧...

15、 深度学习之正向传播和反向传播

上一节介绍了训练和推理的概念,这一节接着训练和推理的概念讲一下,神经网络的正向传播和反向传播。 其实单看正向传播和反向传播这两个概念,很好理解。 正向传播(Forward Propagation)是指从输入层到输出层的数据流动过程,而反向传播(Backpropagation)是指数据从输出…...

微信小程序中复制文本

在微信小程序中&#xff0c;可以使用wx.setClipboardData()方法来实现复制文本内容的功能。以下是一个示例代码&#xff1a; // 点击按钮触发复制事件 copyText: function() {var that this;wx.setClipboardData({data: 要复制的文本内容,success: function(res) {wx.showToa…...

vue3学习--初始

...

cmake和vscode 下的cmake的使用详解(二)

第四讲&#xff1a; GDB 调试器 前言&#xff1a; GDB(GNU Debugger) 是一个用来 调试 C/C 程序 的功能强大的 调试器 &#xff0c;是 Linux 系统开发 C/C 最常用的调试器 程序员可以 使用 GDB 来跟踪程序中的错误 &#xff0c;从而减少程序员的工作量。 Linux 开发 C/C …...

集成开发环境 PyCharm 的安装【侯小啾python领航班系列(二)】

集成开发环境PyCharm的安装【侯小啾python领航计划系列(二)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹…...

mysql从库设置为只读

直奔主题&#xff0c;mysql设置为只读后&#xff0c;无法增删改。 设置命令&#xff1a; mysql> set global read_only1; #1是只读&#xff0c;0是读写 mysql> show global variables like %read_only%; 以下是相关说明&#xff1a; 1、对于数据库读写状态&#xf…...

.NET6实现破解Modbus poll点表配置文件

📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!📢本文作者:由webmote 原创📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !序言 Modbus 协议是工控领域常见…...

【零基础入门Docker】Dockerfile中的USER指令以及dockerfile命令详解

✍面向读者&#xff1a;所有人 ✍所属专栏&#xff1a;Docker零基础入门专栏 目录 第 1 步&#xff1a;创建 Dockerfile 第 2 步&#xff1a;构建 Docker 镜像 第 3 步&#xff1a;运行 Docker 容器 第 4 步&#xff1a;验证输出 dockerfile命令详解 最佳实践 默认情况下…...

R语言期末考试复习二

上篇文章的后续&#xff01;&#xff01;&#xff01;&#xff01; http://t.csdnimg.cn/sqvYD 1.给向量vec1设置名为"A","B","C","D","E","F","G"。 2.将矩阵mat1的行名设置为"Row1"&#…...

golang Pool实战与底层实现

使用的go版本为 go1.21.2 首先我们写一个简单的Pool的使用代码 package mainimport "sync"var bytePool sync.Pool{New: func() interface{} {b : make([]byte, 1024)return &b}, }func main() {for j : 0; j < 10; j {obj : bytePool.Get().(*[]byte) // …...

WPF使用Prism框架批量注册Page,Window,UserControl等视图组件

前言 为了提高Prism框架下面的注册视图资源的简单性和提高后期可维护性,本文将使用prism自带的通过反射来批量注册视图资源,帮助我们快速高效的完成开发任务。 我们平常注册前端视图资源,一般都是在RegisterTypes方法里面,使用IContainerRegistry 的RegisterForNavigation…...

网络安全应急响应-Server2228(环境+解析)

网络安全应急响应 任务环境说明: 服务器场景:Server2228(开放链接)用户名:root,密码:p@ssw0rd123...

[WP] ISCTF2023 Web 部分题解

圣杯战争!!! 反序列化伪协议读取 where_is_the_flag 环境变量根目录当前目录 绕进你的心里 利用正则最大回溯绕过 easy_website or select 用双写绕过 空格用/**/绕&#xff0c;报错注入 wafr codesystem(ca\t /f*) webinclude 扫描得到index.bak备份文件打开为加密的代码 写…...

uniapp之Vue3配置跨域(代理)

在uni-app中&#xff0c;我们可以使用vue.config.js文件来配置跨域&#xff08;代理&#xff09;。以下是一个示例&#xff1a; // vue.config.js module.exports {devServer: {proxy: {/api: { // 这里填写你要代理的接口前缀&#xff0c;例如/apitarget: http://localhost:…...

单片机实验(三)

前言 实验一&#xff1a;利用定时器T1的中断控制P1.7引脚输出音频信号&#xff0c;启动蜂鸣器发出一段熟悉的与众不同的具有10个音节的音乐音频。 实验二&#xff1a;使用定时器/计数器来实现一个LCD显示年、月、日、星期 、时、分、秒的电子表&#xff0c;要求时和分可以方便…...

Python 2进制按位取反

根据一checksum算法需要将一些参数按位取反 例&#xff1a;参数 13 数字13二进制为1101 [((x)) for x in str(bin(13))] [0, b, 1, 1, 0, 1] 除去0b字符串然后按位取反得到0010 [(1^int(x)) for x in str(bin(13)).replace(0b,)] [0, 0, 1, 0]然后将得到的2进制转换成十进制…...

【用Python根据用户名和手机号码生成Hash值并创建.cs .h和xlsx文件】

用Python根据用户名和手机号码生成Hash值并创建C Sharp .cs、嵌入式.h和xlsx表格文件 用Python根据用户名和手机号码生成Hash值并创建C Sharp .cs、嵌入式.h和xlsx表格文件&#xff0c;主要是为每个用户创建一个pubkey&#xff0c;并输出C Sharp C#和嵌入式 Keil的工程文件 pub…...

<Linux>(极简关键、省时省力)《Linux操作系统原理分析之存储管理(2)》(15)

[TOC](《Linux操作系统原理分析之存储管理&#xff08;2&#xff09;》&#xff08;15&#xff09; 5 存储管理5.4 分页存储管理5.4.1 纯分页存储管理a.页&#xff08;页面&#xff09;和物理块&#xff08;帧&#xff09;b. 页面大小c. 逻辑地址结构 5.5 存储扩充技术5.5.2 交…...

手把手教你将自定义视频问答JSON转成EasyR1可用的Parquet数据集

手把手教你将自定义视频问答JSON转成EasyR1可用的Parquet数据集 当你在构建视频问答模型时&#xff0c;可能已经收集了大量结构化的JSON格式数据&#xff0c;但如何将这些数据适配到EasyR1框架中却成了一个技术难题。本文将为你提供一个从零开始的完整解决方案&#xff0c;解决…...

当知识有了‘关系网‘:LightRAG如何让大模型‘秒懂‘你的文档?

想象一下&#xff0c;你有一座藏书万卷的图书馆&#xff0c;但你找书的方式只有一种——记住每本书某个页面的关键词&#xff0c;然后靠"猜"来定位。 这&#xff0c;就是传统RAG系统的尴尬处境。 今天要介绍的这个开源项目LightRAG&#xff0c;被顶会EMNLP 2025接收…...

Nuxt3 + PM2 + Nginx:打造高可用前端部署方案(附常见问题排查指南)

Nuxt3 PM2 Nginx&#xff1a;打造高可用前端部署方案&#xff08;附常见问题排查指南&#xff09; 在当今快速迭代的Web开发领域&#xff0c;Nuxt3凭借其出色的服务端渲染能力和现代化的开发体验&#xff0c;正成为越来越多技术团队的首选框架。然而&#xff0c;将Nuxt3应用部…...

安规设计规范-3(如何计算电气间隙和爬电距离)

详尽的计算方式建议参考各个标准的要求&#xff0c;本文只指出常规的基础计算流程。以下示例严格遵循 GB/T 16935.1-2023/IEC 60664-1:2020《低压系统内设备的绝缘配合》&#xff0c;选用储能 PCS&#xff08;储能变流器&#xff09;最常见的230V AC 电网侧对低压控制侧场景&am…...

新手福音:借力卓晴式AI,在快马平台轻松完成你的首个网页项目

作为一个刚接触编程的新手&#xff0c;想要创建个人网页却不知从何下手是很常见的情况。最近我发现了一个特别适合新手的组合方案&#xff1a;用AI生成代码在线平台实时调试。下面记录我的完整实践过程&#xff0c;希望能帮到同样想入门的朋友。 明确需求清单 首先梳理出网页需…...

5分钟掌握高效网页完整截图:告别手动拼接的烦恼

5分钟掌握高效网页完整截图&#xff1a;告别手动拼接的烦恼 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extension …...

seo文章生成工具的原理是什么

SEO文章生成工具的原理是什么&#xff1f; 随着互联网的发展&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;在网站运营中的重要性愈加凸显。在这个过程中&#xff0c;SEO文章生成工具逐渐成为许多网站管理者的利器。这些工具究竟是如何运作的呢&#xff1f;本文将详细解…...

鸿蒙3.1实测:UART调试日志去Root全流程(含init.cfg避坑指南)

鸿蒙3.1 UART调试权限管理实战&#xff1a;从Root到Shell的无缝切换 当你在深夜的实验室里盯着串口终端上刺眼的#符号时&#xff0c;是否曾思考过这个Root权限带来的安全隐患&#xff1f;鸿蒙系统作为新一代分布式操作系统&#xff0c;其权限管理机制与Android有着本质区别。本…...

Vue3+Three.js实战:拆解Xtreme1点云标注工具的技术架构

Vue3Three.js深度实战&#xff1a;构建工业级3D点云标注工具的技术解析 在自动驾驶、工业检测和机器人视觉领域&#xff0c;3D点云标注工具正成为AI训练数据生产的核心基础设施。Xtreme1作为开源多模态标注平台的代表&#xff0c;其pc-tool模块采用Vue3Three.js技术栈实现了专…...

FanControl进阶指南:从噪音诊断到智能散热系统构建

FanControl进阶指南&#xff1a;从噪音诊断到智能散热系统构建 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/Fa…...