【LeetCode】1654:到家的最少跳跃次数的解题思路 关于力扣无法return的BUG的讨论

news2024/11/25 19:25:15

文章目录

  • 一、题目
  • 二、题解与代码
  • 三、神奇的BUG
    • 3.1 无法执行的 return 和 break 语句
    • 3.2 通过另一个 break 解决

一、题目

有一只跳蚤的家在数轴上的位置 x 处。请你帮助它从位置 0 出发,到达它的家。

跳蚤跳跃的规则如下:

  • 它可以 往前 跳恰好 a 个位置(即往右跳)。
  • 它可以 往后 跳恰好 b 个位置(即往左跳)。
  • 它不能 连续 往后跳 2 次。
  • 它不能跳到任何 forbidden 数组中的位置。
  • 跳蚤可以往前跳超过它的家的位置,但是它不能跳到负整数的位置。

给你一个整数数组 forbidden ,其中 forbidden[i] 是跳蚤不能跳到的位置,同时给你整数 abx ,请你返回跳蚤到家的最少跳跃次数。如果没有恰好到达 x 的可行方案,请你返回 -1

示例一:

输入:forbidden = [14,4,18,1,15], a = 3, b = 15, x = 9
输出:3
解释:往前跳 3 次(0 -> 3 -> 6 -> 9),跳蚤就到家了。

示例二:

输入:forbidden = [8,3,16,6,12,20], a = 15, b = 13, x = 11
输出:-1

示例三:

输入:forbidden = [1,6,2,14,5,17,4], a = 16, b = 9, x = 7
输出:2
解释:往前跳一次(0 -> 16),然后往回跳一次(16 -> 7),跳蚤就到家了。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/minimum-jumps-to-reach-home/
题目著作权归领扣网络所有。仅供个人学习,非商用。

二、题解与代码

class Solution {
    public int minimumJumps(int[] forbidden, int a, int b, int x) {
        Queue<int[]> queue = new ArrayDeque<int[]>();
        Set<Integer> visited = new HashSet<Integer>();
        queue.offer(new int[]{0, 1, 0});
        visited.add(0);
        int lower = 0, upper = Math.max(Arrays.stream(forbidden).max().getAsInt() + a, x) + b;
        Set<Integer> forbiddenSet = new HashSet<Integer>();
        for (int position : forbidden) {
            forbiddenSet.add(position);
        }
        while (!queue.isEmpty()) {
            int[] arr = queue.poll();
            int position = arr[0], direction = arr[1], step = arr[2];
            if (position == x) {
                return step;
            }
            int nextPosition = position + a;
            int nextDirection = 1;
            if (lower <= nextPosition && nextPosition <= upper && !visited.contains(nextPosition * nextDirection) && !forbiddenSet.contains(nextPosition)) {
                visited.add(nextPosition * nextDirection);
                queue.offer(new int[]{nextPosition, nextDirection, step + 1});
            }
            if (direction == 1) {
                nextPosition = position - b;
                nextDirection = -1;
                if (lower <= nextPosition && nextPosition <= upper && !visited.contains(nextPosition * nextDirection) && !forbiddenSet.contains(nextPosition)) {
                    visited.add(nextPosition * nextDirection);
                    queue.offer(new int[]{nextPosition, nextDirection, step + 1});
                }
            }
        }
        return -1;
    }
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/minimum-jumps-to-reach-home/solutions/2414842/dao-jia-de-zui-shao-tiao-yue-ci-shu-by-l-sza1/
来源:力扣(LeetCode)
著作权归作者所有。仅供个人学习,非商用。

三、神奇的BUG

注:本部分仅阐述发现的 BUG,本部分代码并不是题解。

3.1 无法执行的 return 和 break 语句

  • 在 LeetCode 的官网上,下图红框内的 if 语句在判断结果为 true 的条件下不会执行代码块中的 return 语句!!!
  • 在下图中可以很清楚地看到 (tmp[0] == x) 在第 4 次循环时,输出的结果为 true ,但并没有执行 return 操作。
  • Solution 类的代码 直接复制 到 IDEA 中则可以执行!!!

在这里插入图片描述

  • IDEA 中的执行结果如下图所示:

在这里插入图片描述

  • return 换成 break 语句也同样无法执行
    在这里插入图片描述

大家有遇到过类似的 BUG 吗?还是说有什么我没注意到的问题呢?

3.2 通过另一个 break 解决

  • 在同层次的另一个 if 语句的代码块中加入 break 语句后,之前不能执行的 breakreturn 语句可以正常执行了!!!
    在这里插入图片描述
  • 严谨起见,我们用如下代码来查看到底是通过哪条语句的 break 退出循环的。
  • 显然是之前不能执行的那条。

在这里插入图片描述

  • 当然,新加入的 break 也是可执行的。

在这里插入图片描述

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

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

相关文章

Android OTA 相关工具(七) 使用 lpunpack 解包 super.img

文章目录 1. lpunpack 的编译2. lpunpack 的帮助信息3. lpunpack 的用法3.1 解包所有镜像3.2 解包指定名称分区镜像3.3 解包指定槽位分区镜像 4. 其它 从 Android 10(Q) 开始&#xff0c;引入了动态分区&#xff0c;伴随的就是一组动态分区内容数据增删改查相关的操作&#xff…

数字证书UKey太多怎么管理,一分钟轻松学会

公司数字证书Ukey太多&#xff0c;管理乱&#xff0c;也不能满足异地使用需求&#xff0c;怎么办&#xff1f; 一台USB Sever就能解决&#xff01; 第一步 USB Sever有2口、8口、24口多种规格&#xff0c; 根据你的数字证书Ukey数量选择合适的规格。 第二步 把Ukey全部插上…

韶音骨传导耳机好不好,韶音骨传导耳机值得入手吗

韶音耳机的质量还是很不错的&#xff0c;其实力相比于百元价位的耳机而言领先了不少&#xff0c;具备多种功能&#xff0c;佩戴起来也是有着舒适性。它自主研发了骨传导音频技术&#xff0c;不过在今年开始&#xff0c;似乎已经将方向开始往运动偏移。 而在韶音的骨传导耳机中&…

PHY 芯片接口直连(不使用变压器)的设计

1.基础知识 网口 PHY 芯片对 TX 和 RX 信号有两种驱动方式&#xff1a;电压驱动和电流驱动。不同的驱动方式决定了 PHY 在与变压器连接的时候&#xff0c;变压器的中心抽头的接法。电压型中心抽头通过电容接到地&#xff0c;电流型中心抽头上拉至VDD&#xff0c;VDD为PHY的供电…

【问题】jdk20执行虚拟线程报错解决方案

java: ofPlatform() 是预览 API&#xff0c;默认情况下处于禁用状态。 &#xff08;请使用 --enable-preview 以启用预览 API&#xff09; 在idea增加配置 编辑配置 增加jvm参数 然后去执行 public static void main(String[] args) {int 次数 100000;System.out.println(&q…

智汇云舟亮相中国安防工程商集成商大会

智汇云舟亮相中国安防工程商集成商大会&#xff0c;以视频孪生驱动安防行业数字化转型 近日&#xff0c;由中国安全防范产品行业协会指导&#xff0c;永泰传媒主办的中国安防工程商&#xff08;系统集成商&#xff09;大会暨第69届中国安防新产品、新技术成果展示在石家庄圆满…

轻松解决Mac和Windows中Unity汉化问题

本文是参考https://blog.csdn.net/ChinarCSDN/article/details/83213739该文写的。 上述作者是针对windows平台来写的&#xff0c;亲测方法可用。文中有中文字体包&#xff0c;可自行下载。 其他中文包下载地址&#xff1a; https://new-translate.unity3d.jp/v1/live/54/XX…

Kafka系列五消费者

文章首发于个人博客&#xff0c;欢迎访问关注&#xff1a;https://www.lin2j.tech 与生产者对应的是消费者&#xff0c;应用程序可以通过 KafkaConsumer 来订阅主题&#xff0c;从主题中拉取消息。 使用 KafkaConsumer 之前需要先理解消费者和消费者组的概念。 消费者与消费…

性能提升3-4倍!贝壳基于Flink + OceanBase的实时维表服务

作者介绍&#xff1a;肖赞&#xff0c;贝壳找房&#xff08;北京&#xff09;科技有限公司 OLAP 平台负责人&#xff0c;基础研发线大数据平台部架构师。 贝壳找房是中国最大的居住服务平台。作为居住产业数字化服务平台&#xff0c;贝壳致力于推进居住服务的产业数字化、智能…

〔020〕Stable Diffusion 之 骨骼姿势 篇

✨ 目录 &#x1f388; 姿势检测 / OpenPose&#x1f388; 姿势检测 OpenPose 参数介绍&#x1f388; 姿势检测 OpenPose 基本使用&#x1f388; 深度库 / Depth Lib&#x1f388; 深度库 Depth Lib 参数介绍&#x1f388; 3D姿势检测 / 3D Openpose Editor&#x1f388; 3D姿势…

安达发|2024年,APS计划排产技术应运而生

随着制造业竞争加剧&#xff0c;企业如何提高生产效率、降低成本、满足客户需求成为关键。2024年&#xff0c;APS计划排产技术应运而生&#xff0c;通过实施APS自动排程&#xff0c;企业将获得诸多效益。 近年来&#xff0c;全球制造业正面临着原材料价格波动、人工成本上升、环…

图像化数据库工具DBeaver远程连接云服务器的MySQL数据库

一、安装宝塔面板 使用xshell、electerm、SecureCRT等远程终端连接登陆上云服务器&#xff0c;在Linux宝塔面板使用脚本安装 安装后&#xff0c;如下图&#xff1a;按照提示&#xff0c;在云服务器防火墙/安全组放行Linux宝塔面板的端口 在浏览器打开上述网址&#xff0c;…

命令行发邮件

第一步&#xff1a;打开windows命令行&#xff0c;运行如下代码 telnet smtp.qiye.163.com 25 返回如下结果代表成功&#xff1a; 返回220代码就可以继续操作了.... 第二步&#xff1a;执行ehlo xxx&#xff08;xxx随便写&#xff0c;就是个名称而已&#xff09; 第三步&a…

Kubernetes技术--使用kubeadm搭建高可用的K8s集群(贴近实际环境)

1.高可用k8s集群架构(多master) 2.安装硬件要求 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 注: 这里属于教学环境,所以使用三台虚拟机模拟实现。 3.部署规划 4.部署前准备 (1).关闭防火墙 systemctl stop fi…

计算机网络 第二节

目录 一&#xff0c;计算机网络的分类 1.按照覆盖范围分 2.按照所属用途分 二&#xff0c;计算机网络逻辑组成部分 1.核心部分 &#xff08;通信子网&#xff09; 1.1电路交换 1.2 分组交换 两种方式的特点 重点 2.边缘部分 &#xff08;资源子网&#xff09; 进程通信的方…

无涯教程-Android - Spinner函数

Spinner允许您从下拉菜单中选择一个项目 例如。使用Gmail应用程序时,将显示如下所示的下拉菜单,您需要从下拉菜单中选择一个项目。 Spinner Example 示例 本示例演示计算机的类别,您需要从类别中选择一个类别。 以下是修改后的主要Activity文件src/com.example.spinner/Andr…

非科班菜鸡算法学习记录 | 代码随想录算法训练营第51天||309.最佳买卖股票时机含冷冻期 714.买卖股票的最佳时机含手续费 股票总结

309.最佳买卖股票时机含冷冻期 309. Best Time to Buy and Sell Stock with Cooldown(英文力扣连接) 知识点&#xff1a;动规 状态&#xff1a;看思路ok 思路&#xff1a; 四个状态需要想&#xff0c;持有/不持有且过了冷却期/当天卖/正处于冷却期&#xff1b; 具体看注释…

USB WLAN Dongle with AutoInstall

一、什么是Autoinstall USB WLAN dongle. 正常要使用USB 网卡时&#xff0c;都需要使用专门的驱动程式才能将产品驱动起来做使用。通常要安装驱动程式的方式&#xff0c;往往都是上购买品牌商的网页下载驱动&#xff0c;或是利用购买USB网卡附赠的光碟来进行安装。而所谓的Auto…

祝贺!Databend Cloud 和阿里云 PolarDB 达成认证

近日&#xff0c;北京数变科技有限公司旗下产品与阿里云 PolarDB 开源数据库社区展开产品集成认证。 测试结果表明&#xff0c;北京数变科技有限公司旗下产品《Databend Cloud&#xff08;V1.25&#xff09;》正式通过了《阿里云 PolarDB 数据库管理软件》的技术认证&#xff…

企业电子招投标采购系统源码之电子招投标的组成

营造全面规范安全的电子招投标环境&#xff0c;促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标…