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

1345. 跳跃游戏 IV

题目链接

如果没有从i跳到j,则根据i可以跳掉i+1,或者i-1,能够利用

但是现在有3种方式,可以从当前位置跳到i+1, i-1, j(arr[i] = arr[j]),我可以理解为一种搜索的方式吗,在每一步搜索过程中统计当从下标0跳到数组最后一个元素的时候,维护最少跳动次数。

例如数组arr = [100, -23, -23, 404, 100, 23, 23, 23, 3, 404],一共最少需要3次跳动,从下标0到4到3到9。

我们可以理解为一个图,目的是求图的最短路,可以用BFS来解决。

首先将数组中每个下标视为节点,边的构建则是按照题意得三种操作方式,

  • i -> i + 1
  • i -> i - 1
  • i -> j (arr[i] = arr[j])

然后求节点0到节点n-1的最短路径。使用BFS可以天然保证第一次到达终点时,经过的层数最少。之所以不用DFS是因为DFS找到的是一条路径,需要遍历所有可能才能比较最小值,效率低。
BFS是按层扩展,第一次抵达终点时就是最少跳数,不需要继续搜索。

步骤:

  • 维护一个队列用于BFS搜索,存入下标0的元素
  • 为了方便找到相同元素值得下标,通过Map维护
  • 使用dist数组维护最短距离,dist[i] 存储从起点 0 到下标 i 的最少跳数。BFS 按层扩展的特性保证,第一次给某个节点赋值时,它就已经是最短距离了,不需要后续更新。
    • 同时dist还充当了已访问标记,if (dist[nb] == -1)表示还没访问过,所以初始化dist为-1。一旦某个节点被加入队列,立刻赋值 dist[nb] = nextDist,后续再遇到这个节点时条件不成立,自然跳过。
  • 同时确保每个节点最多入队一次,

classSolution{publicintminJumps(int[]arr){// 处理边界intn=arr.length;if(n==1)return0;// 建立相同元素值的Map下标Map<Integer,List<Integer>>map=newHashMap<>();for(inti=0;i<n;i++){// // 如果不存在键则创建// if (!map.containsKey(arr[i])) {// map.put(arr[i], new ArrayList<>());// }// // 存在直接存入// map.get(arr[i]).add(i);map.computeIfAbsent(arr[i],k->newArrayList<>()).add(i);}// 统计距离数组int[]dist=newint[n];// 初始化Arrays.fill(dist,-1);// 从下标0开始出发,dist[0]=0;// 定义队列Queue<Integer>queue=newArrayDeque<>();// 放入下标0queue.offer(0);// BFS遍历while(!queue.isEmpty()){// 获取队头元素intcur=queue.poll();intnextDist=dist[cur]+1;// 即下一个更新的操作部署// 三类邻居List<Integer>neighbors=newArrayList<>();// 判断左右位置是否合适if(cur-1>=0)neighbors.add(cur-1);if(cur+1<n)neighbors.add(cur+1);// 找到相同元素值得下标if(map.containsKey(arr[cur])){neighbors.addAll(map.get(arr[cur]));// 关键优化:防止重复处理同值节点map.remove(arr[cur]);}// 处理邻居for(intnb:neighbors){if(dist[nb]==-1){// 没有被访问过dist[nb]=nextDist;if(nb==n-1)returnnextDist;// 提前终止queue.offer(nb);}}}return-1;}}
http://www.jsqmd.com/news/845072/

相关文章:

  • 图像修复新思路:当Mamba、小波和傅里叶联手,如何让模型‘看清’高频细节?(以WaMaIR/CWNet为例)
  • 技术速递|Web 和移动端远程控制 CLI 会话功能现已开启公开预览
  • 告别手动画图!用Perl脚本自动化统计MS动力学模拟中的氢键(附脚本下载)
  • 绕过中间商!三步教你找到真正的硫化氢检测仪源头厂家 - 品牌推荐大师
  • 手把手教你用YOLACT训练自己的数据集:从COCO格式准备到模型推理全流程(附Python源码)
  • 上海婚纱照多少钱?3000到15000差在哪一篇说清 - eee888
  • 这个暑假,让孩子的成绩“依”然飞跃 - 浙江教育测评
  • 2026年5月DN50管段式电磁流量计国产厂家精选推荐 - 仪表品牌排行榜
  • Kubernetes etcd 技术指南
  • 3个必知技巧:快速掌握Meshroom三维重建核心
  • YOLOv8安全帽识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)
  • 拆解安防摄像头的“眼睛”:从IMX290 Sensor到镜头,如何一步步调出通透画质?
  • 温州沙发翻新换皮靠谱商家推荐|匠阁沙发翻新、御匠沙发翻新、锦修沙发翻新三大品牌全解析、服务内容、全市上门 - 卓信营销
  • Avogadro 2:解决跨平台化学建模可视化挑战的开源方案
  • MoneyPrinterPlus智能视频创作工具实战指南:从零到批量生产的完整流程
  • C++ inline函数深度解析:从链接属性到性能优化的实战指南
  • 电路分析基础(2)
  • 2026年5月哈尔滨纸制品包装选型指南:瓦楞箱、快递包装箱、彩色礼品箱定制,电商/食品/搬家包装厂家优选推荐 - 海棠依旧大
  • 2026年5月市政污水超声波液位差计十大公司盘点 - 仪表品牌排行榜
  • TC2526 低功耗原边反馈开关电源芯片
  • 2023年Linux服务器发行版选型指南:从Ubuntu到Alpine的十大方案深度解析
  • PSCAD 4.6.2调用MATLAB 2020a总失败?手把手教你配置Intel Fortran编译器(附xml文件修改)
  • 2026最新 长春市黄金回收白银回收铂金回收店铺实力排行榜TOP5;五家靠谱回收门店联系方式推荐_转自TXT - 盛世金银回收
  • 长期使用Taotoken官方折扣活动对项目运营成本的实际影响
  • 5分钟快速上手NewGAN-Manager:为足球经理打造个性化脸型包
  • 浩卡招商官方最全详解|号卡分销怎么做、副业靠谱平台推荐(官方推荐码 111666) - 172号卡
  • 洛阳时尚魅影职业培训学校:以非遗妆造技艺,育文旅时代新才 - 中媒介
  • 在银河麒麟V10上,手把手教你用TongWEB部署前后端分离项目(含war包制作与权限避坑)
  • 惠普战66内存硬盘升级全攻略:从选条到安装,手把手教你避开新手常踩的坑
  • 2026最新 长治市黄金回收白银回收铂金回收店铺实力排行榜TOP5;五家靠谱回收门店联系方式推荐_转自TXT - 盛世金银回收