Java算法OJ(11)双指针练习

目录
1.前言
2.正文
2.1存在重复数字
2.1.1题目
2.1.2解法一代码
解析:
2.1.3解法二代码
解析:
2.2存在重复数字plus
2.2.1题目
2.2.2代码
2.2.3解析
3.小结
1.前言
哈喽大家好吖,今天来给大家分享双指针算法的相关练习,题目不多,但却是很经典的双指针的模型,废话不多说让我们开始吧。
2.正文
2.1存在重复数字
2.1.1题目
219. 存在重复元素 II - 力扣(LeetCode)
https://leetcode.cn/problems/contains-duplicate-ii/?envType=problem-list-v2&envId=sliding-window
2.1.2解法一代码
class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {// 创建一个 HashMap,用于存储每个元素的最后出现索引HashMap<Integer, Integer> map = new HashMap<>();// 遍历数组中的每个元素for (int i = 0; i < nums.length; i++) {// 检查当前元素是否已经出现在 map 中,并且索引差是否小于等于 kif (map.containsKey(nums[i]) && (i - map.get(nums[i]) <= k)) {return true; // 如果条件满足,返回 true}// 将当前元素及其索引存入 map 中map.put(nums[i], i);}// 如果遍历完所有元素都没有找到满足条件的对,返回 falsereturn false;}
}
解析:
核心思路:
哈希表存储元素的索引:
map用来存储数组中每个元素的最新出现的索引。map.put(nums[i], i)会在每次遍历时更新该元素的索引。- 通过
map.containsKey(nums[i])检查当前元素是否已经在哈希表中出现过,如果出现过,则进一步判断当前索引与该元素上次出现的索引之差是否小于等于k。判断条件:
- 如果当前元素已经在哈希表中,并且当前索引
i与该元素最后一次出现的索引之间的差值i - map.get(nums[i])小于等于k,则说明找到了符合条件的重复元素对,直接返回true。- 如果条件不满足,则将当前元素及其索引存入
map中,继续遍历下一个元素。返回值:
- 如果遍历完所有元素都没有找到满足条件的元素对,则返回
false。
2.1.3解法二代码
class Solution {public boolean containsNearbyDuplicate(int[] nums, int k){// 使用 HashSet 存储当前窗口内的元素HashSet<Integer> set = new HashSet<>();// 遍历数组中的每个元素for(int i = 0; i < nums.length; i++){// 保证滑动窗口的大小不超过 kif(i > k) set.remove(nums[i - k - 1]);// 如果当前元素已经存在于 set 中,说明找到了重复的元素,返回 trueif(!set.add(nums[i])) return true;}// 如果没有找到符合条件的重复元素,返回 falsereturn false;}
}
解析:
思路核心:
HashSet存储当前滑动窗口中的元素:
set是用来存储当前窗口中的元素。如果set中已经存在当前元素,则说明找到了一个重复元素,并且这个元素满足索引差不超过k,因此返回true。滑动窗口的维护:
- 使用
if (i > k)来控制滑动窗口的大小,确保窗口中最多包含k个元素。当索引i大于k时,意味着滑动窗口的左边界已经移动,需要移除set中索引i - k - 1位置的元素,即set.remove(nums[i - k - 1])。这样保证了窗口大小不会超过k。判断重复元素:
set.add(nums[i])如果当前元素已经在set中存在,add方法会返回false,表示没有成功添加新元素,此时就说明找到了重复元素,返回true。- 如果
set.add(nums[i])返回true,则说明当前元素不重复,继续遍历下一个元素。返回
false:
- 如果遍历完所有元素后都没有找到重复元素,则返回
false。
2.2存在重复数字plus
2.2.1题目
220. 存在重复元素 III - 力扣(LeetCode)
https://leetcode.cn/problems/contains-duplicate-iii/description/?envType=problem-list-v2&envId=sliding-window
2.2.2代码
class Solution {public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) {int n = nums.length;// 创建一个 TreeSet 来存储滑动窗口中的元素TreeSet<Long> set = new TreeSet<Long>();// 遍历 nums 数组中的每个元素for (int i = 0; i < n; i++) {// 检查滑动窗口中是否存在满足条件的元素Long ceiling = set.ceiling((long) nums[i] - (long) t);// 如果找到一个元素满足条件,返回 trueif (ceiling != null && ceiling <= (long) nums[i] + (long) t) {return true;}// 将当前元素添加到 TreeSet 中set.add((long) nums[i]);// 保持滑动窗口的大小为 k,如果当前索引 i 大于或等于 k// 则移除窗口中最左边的元素if (i >= k) {set.remove((long) nums[i - k]);}}// 如果遍历完所有元素后都没有找到满足条件的元素对,返回 falsereturn false;}
}
2.2.3解析
核心思路:
TreeSet 用于查找邻近元素:
TreeSet是一个有序集合,它根据元素的大小自动排列,因此可以快速查找给定范围内的元素。这里,我们使用ceiling方法来查找大于等于nums[i] - t的最小元素,如果这个元素与当前nums[i]的差小于等于t,则满足题目条件,返回true。滑动窗口: 我们维护一个大小为
k的滑动窗口。每次遍历一个新元素时,先在TreeSet中查找该元素的邻近值(是否满足条件),然后将当前元素添加到窗口中。为了保持窗口大小为k,如果当前索引大于等于k,则移除窗口中最左边的元素。这样,滑动窗口始终保持最新的k个元素。
让我们来模拟一下,假设我们有以下数组:
nums = [1, 5, 9, 1, 5, 9], k = 2, t = 3
在这个例子中,滑动窗口的大小是 2(即最多允许相隔 2 个元素),并且差值要求不超过 3。我们按顺序处理每个元素,检查是否存在符合条件的元素对。
- 对于
nums[0] = 1,set为空,直接将 1 添加到set。- 对于
nums[1] = 5,我们查找set中是否存在元素>= 5 - 3 = 2,并且该元素应小于等于5 + 3 = 8。在set中没有满足条件的元素,所以将 5 添加到set。- 对于
nums[2] = 9,我们查找set中是否存在元素>= 9 - 3 = 6,并且该元素应小于等于9 + 3 = 12。找到 5,它满足条件,所以返回true。因此,这个例子会返回
true,因为存在元素对(5, 9),它们的差值为 4,满足k=2和t=3。
3.小结
今天的分享到这里就结束了,喜欢的小伙伴不要忘记点点赞点个关注,你的鼓励就是对我最大的支持,加油!
相关文章:
Java算法OJ(11)双指针练习
目录 1.前言 2.正文 2.1存在重复数字 2.1.1题目 2.1.2解法一代码 解析: 2.1.3解法二代码 解析: 2.2存在重复数字plus 2.2.1题目 2.2.2代码 2.2.3解析 3.小结 1.前言 哈喽大家好吖,今天来给大家分享双指针算法的相关练习&…...
44.扫雷第二部分、放置随机的雷,扫雷,炸死或成功 C语言
按照教程打完了。好几个bug都是自己打出来的。比如统计周围8个格子时,有一个各自加号填成了减号。我还以为平移了,一会显示是0一会显示是2。结果单纯的打错了。debug的时候断点放在scanf后面会顺畅一些。中间多放一些变量名方便监视。以及mine要多显示&a…...
大语言模型LLM的微调代码详解
代码的摘要说明 一、整体功能概述 这段 Python 代码主要实现了基于 Hugging Face Transformers 库对预训练语言模型(具体为 TAIDE-LX-7B-Chat 模型)进行微调(Fine-tuning)的功能,使其能更好地应用于生成唐诗相关内容的…...
钉钉与企业微信机器人:助力网站定时任务高效实现
钉钉、企业微信机器人在网站定时任务中的应用,主要体现在自动化通知、提醒以及数据处理等方面。 以下是一些具体的应用场景: 1. 自动化通知 项目进度提醒:在蒙特网站所负责的软件开发或网站建设项目中,可以利用机器人设置定时任…...
自然语言处理工具-广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读-已经解锁了 全功能的 apk包
Android -「安卓端」 广告配音工具用于语音合成助手/自媒体配音/广告配音/文本朗读。 广告配音工具:让您的文字“说话”,在这个快速发展的数字时代,广告配音工具为各种语音合成需求提供了一站式解决方案。无论是自媒体配音、商业广告配音、…...
深入解析注意力机制
引言随着深度学习的快速发展,注意力机制(Attention Mechanism)逐渐成为许多领域的关键技术,尤其是在自然语言处理(NLP)和计算机视觉(CV)中。其核心思想是赋予模型“关注重点”的能力…...
Unity图形学之雾Fog
1.设置雾化: 2.雾化变化曲线:FogMode (1)线性: (2)一次指数: (3)二次指数: Shader "Custom/FogTest" {Properties{_Color ("Color…...
【大数据学习 | Spark-Core】详解Spark的Shuffle阶段
1. shuffle前言 对spark任务划分阶段,遇到宽依赖会断开,所以在stage 与 stage 之间会产生shuffle,大多数Spark作业的性能主要就是消耗在了shuffle环节,因为该环节包含了大量的磁盘IO、序列化、网络数据传输等操作。 负责shuffle…...
如何启动 Docker 服务:全面指南
如何启动 Docker 服务:全面指南 一、Linux 系统(以 Ubuntu 为例)二、Windows 系统(以 Docker Desktop 为例)三、macOS 系统(以 Docker Desktop for Mac 为例)四、故障排查五、总结Docker,作为一种轻量级的虚拟化技术,已经成为开发者和运维人员不可或缺的工具。它允许用…...
使用client-go在命令空间test里面对pod进行操作
目录 一、获取使用restApi调用的token信息 二、client-go操作pod示例 1、获取到客户端 2、创建pod 3、获取test命令空间的所有pod 4、获取某个具体pod的详细信息 5、更新pod 6、删除pod 三、总结 官方参考地址:https://kubernetes.io/docs/reference/kuber…...
Linux中网络文件系统nfs使用
一、nfs服务 NFS(Network File System) 是一种用于在网络中共享文件的协议,允许不同操作系统(如 Linux、Unix、MacOS 等)之间进行文件共享。 NFS 的工作原理基于客户端-服务器模型,服务器提供共享文件系统…...
气膜建筑:打造全天候安全作业空间,提升工程建设效率—轻空间
在现代建筑工程中,施工环境的管理和作业效率是决定项目进度和质量的关键因素。然而,施工过程中常常会受到天气变化的影响,诸如大风、雨雪、沙尘等恶劣天气常常延误工期,增加施工难度。为了解决这一问题,气膜建筑以其独…...
【HarmonyOS学习日志(10)】一次开发,多端部署之功能级一多开发,工程级一多开发
功能级一多开发 SysCap机制介绍 HarmonyOS使用SysCap机制(即SystemCapability),可以帮助开发者仅关注设备的系统能力,而不用考虑成百上千种具体的设备类型。 在过去,开发不同设备上的应用就用不同设备的SDK进行开发&…...
dmdba用户资源限制ulimit -a 部分配置未生效
dmdba用户资源限制ulimit -a 部分配置未生效 1 环境介绍2 数据库实例日志报错2.1 mpp01 实例日志报错2.2 mpp02 实例日志报错 3 mpp02 服务器资源限制情况4 关闭SELinux 问题解决4.1 临时关闭 SELinux4.2 永久关闭 SELinux 5 达梦数据库学习使用列表 1 环境介绍 Cpu x86 Os Ce…...
【Code First】.NET开源 ORM 框架 SqlSugar 系列
.NET开源 ORM 框架 SqlSugar 系列 【开篇】.NET开源 ORM 框架 SqlSugar 系列【入门必看】.NET开源 ORM 框架 SqlSugar 系列【实体配置】.NET开源 ORM 框架 SqlSugar 系列【Db First】.NET开源 ORM 框架 SqlSugar 系列【Code First】.NET开源 ORM 框架 SqlSugar 系列 …...
如何在谷歌浏览器中切换DNS服务器
在浏览网页时,DNS(域名系统)服务器的作用是将您输入的网址转换为计算机可以理解的IP地址。有时,您可能需要更改默认的DNS服务器以提升网络速度或解决访问问题。本文将详细介绍如何在谷歌浏览器中切换DNS服务器,并在此过…...
Spring Cloud Stream实现数据流处理
1.什么是Spring Cloud Stream? Spring Cloud Stream的核心是Stream,准确来讲Spring Cloud Stream提供了一整套数据流走向(流向)的API, 它的最终目的是使我们不关心数据的流入和写出,而只关心对数据的业务处…...
列表上移下移功能实现
后台管理某列表需实现上移下移功能,并与前端展示列表排序相关。 现将开发完成过程笔记记录下来。 目录 列表增加属性 JQuery脚本 服务端 控制器 服务层 总结 列表增加属性 在循环渲染时,在table表格的tr上增加id和排序的属性值,以便传…...
升级智享 AI 直播三代:领航原生直播驶向自动化运营新航道
在瞬息万变的数字商业世界,直播行业恰似一艘破浪前行的巨轮,原生直播作为初始 “航船”,在历经风雨后,终于迎来智享 AI 直播三代这股强劲 “东风”,校准航向,开启自动化运营的全新航道,驶向一片…...
Llmcad: Fast and scalable on-device large language model inference
题目:Llmcad: Fast and scalable on-device large language model inference 发表于2023.09 链接:https://arxiv.org/pdf/2309.04255 声称是第一篇speculative decoding边缘设备的论文(不一定是绝对的第一篇),不开源…...
PicView图片浏览器完整指南:从零开始掌握高效图片管理技巧
PicView图片浏览器完整指南:从零开始掌握高效图片管理技巧 【免费下载链接】PicView Fast, free and customizable image viewer for Windows 10 and 11. 项目地址: https://gitcode.com/gh_mirrors/pi/PicView PicView是一款专为Windows 10和11设计的快速、…...
如何用Langchain来实现一个查询天气的AI智能体
上一篇,我们讲了如何用Langchain来搭建一个通义大语言模型应用。今天小编就来讲一讲如何用Langchain来实现一个查询天气的AI智能体。本文使用的大模型是智谱AI,采用Python代码来实现。我们需要先在官方网站申请一个开发的Key,在接下来的代码中…...
Python自动化爬取企查查企业工商信息的实战技巧
1. Python爬取企查查数据的核心思路 企查查作为国内权威的企业信息查询平台,包含了大量有价值的工商注册信息。对于金融、证券行业的从业者来说,经常需要批量获取这些数据进行分析。手动一个个查询不仅效率低下,还容易出错。这时候Python自动…...
雪女-斗罗大陆模型案例分享:多种提示词生成不同风格雪女图
雪女-斗罗大陆模型案例分享:多种提示词生成不同风格雪女图 最近在体验“雪女-斗罗大陆-造相Z-Turbo”这个AI绘画模型时,我发现了一个特别有意思的现象:同样一个模型,用不同的提示词描述,能画出风格迥异的雪女形象。有…...
Bud错误处理终极指南:构建健壮Web应用的10个最佳实践
Bud错误处理终极指南:构建健壮Web应用的10个最佳实践 【免费下载链接】bud The Full-Stack Web Framework for Go 项目地址: https://gitcode.com/gh_mirrors/bu/bud Bud作为Go语言的全栈Web框架,其错误处理机制直接影响应用的稳定性和用户体验。…...
机械原理课程设计 洗瓶机机构设计(设计说明书+3张CAD图纸+连杆机构设计软件)
洗瓶机作为工业清洗领域的核心设备,其机构设计的合理性直接影响清洗效率与质量。机械原理课程设计中的洗瓶机机构设计,聚焦于通过连杆机构实现瓶体的连续输送、定位与翻转,确保清洗液均匀覆盖瓶内壁。设计核心在于构建多自由度运动系统&#…...
璀璨星河Starry Night效果展示:多风格并行生成(梵高/达芬奇/莫奈)
璀璨星河Starry Night效果展示:多风格并行生成(梵高/达芬奇/莫奈) 1. 沉浸式艺术创作体验 璀璨星河Starry Night不仅仅是一个AI绘画工具,更是一个数字艺术殿堂。基于Streamlit构建的交互界面彻底打破了传统AI工具的工业感&#…...
python高校大学生家教平台的设计与开发
目录需求分析与功能规划技术栈选型数据库设计关键功能实现测试与部署持续迭代项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作需求分析与功能规划 明确平台核心需求,包括用户角色划分(学生、教师、管理员…...
终极指南:使用Refine和Ant Design快速构建专业列表页面
终极指南:使用Refine和Ant Design快速构建专业列表页面 【免费下载链接】refine 一个用于构建内部工具、管理面板、仪表盘和B2B应用程序的React框架,具有无与伦比的灵活性。 项目地址: https://gitcode.com/GitHub_Trending/re/refine Refine是一…...
手把手教学:用SiameseAOE从海量文本中提取“属性-观点”对
手把手教学:用SiameseAOE从海量文本中提取"属性-观点"对 1. 为什么需要属性观点抽取? 在日常工作中,我们经常遇到这样的场景:面对成千上万条用户评论、社交媒体反馈或调查问卷,如何快速找出有价值的信息&a…...
