华为OD机试 - 最小步骤数(Java 2023 B卷 100分)

news/2024/7/20 19:11:12 标签: 华为od, java, 开发语言

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入:4 8 7 5 2 3 6 4 8 1
      • 2、输出:2
      • 3、说明:
      • 4、思路分析

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

一个正整数数组 设为nums,最大为100个成员,求从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。

要求:

  1. 第一步 必须从第一元素起 且 1<=第一步步长<len/2 (len为数组长度);
  2. 从第二步开始只能以所在成员的数字走相应的步数,不能多不能少, 如果目标不可达返回-1, 只输出最小的步骤数量;
  3. 只能向数组的尾部走不能向回走。

二、输入描述

有正整数数组空格分割,数组长度<100。

三、输出描述

正整数 最小步数,不存在输出-1。

四、解题思路

题目要求计算从第一个成员开始正好走到数组最后一个成员所使用的最小步骤数。

步骤要求如下:

  1. 第一步必须从第一个元素起,步长范围为 [1, len/2),其中 len 为数组长度;
  2. 从第二步开始,只能以当前成员的数字作为步数走,不能多也不能少;
  3. 目标不可达时返回 -1,只输出最小的步骤数量;
  4. 只能向数组的尾部走,不能向回走。

具体解题思路如下:

  1. 读取输入的正整数数组;
  2. 初始化数组长度为 len,转换为整型数组 arr;
  3. 初始化最小步数 minCount 为 0;
  4. 从第一步开始,遍历步长从 1 到 len/2 的各种情况:
    • 设置步数 count 为 1,位置 index 为当前步长;
    • 从第二步开始,根据当前位置的数字进行走步操作,直到走出数组范围或者到达最后一个成员;
    • 如果走的长度超出了范围,则说明这种情况不符合要求,退出循环;
    • 如果刚好走到最后一个成员,更新最小步数 minCount。
  5. 根据最小步数 minCount 的值输出结果,如果为 0 则输出 -1,否则输出 minCount。

五、Java算法源码

java">public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    String[] nums = scanner.nextLine().split(" ");

    int len = nums.length;
    int[] arr = new int[len];
    for (int i = 0; i < len; i++) {
        arr[i] = Integer.parseInt(nums[i]);
    }

    int minCount = 0;

    // 第1步最多只能走 len/2,遍历各种情况
    for (int i = 1; i < len / 2; i++) {
        // 走出第一步后的步数和位置
        int count = 1;
        int index = i;

        // 从第2步开始只能以所在成员的数字走相应的步数
        while (true) {
            // 再走一步
            index += arr[index];

            // 步数加1
            count++;

            if (index > len - 1) {
                // 当走的长度超出了范围,说明这种情况不符合要求
                break;
            } else if (index == len - 1) {
                // 刚好走到最后一个成员,更新最小步数
                if (minCount == 0) {
                    minCount = count;
                } else {
                    minCount = Math.min(minCount, count);
                }
                break;
            }
        }
    }

    if (minCount == 0) {
        System.out.println(-1);
    } else {
        System.out.println(minCount);
    }
}

六、效果展示

1、输入:4 8 7 5 2 3 6 4 8 1

2、输出:2

3、说明:

  1. 第一个可选步长选择2;
  2. 从第一个成员4开始走两步到7;
  3. 第二步:从7经过7个成员到最后。

4、思路分析

  1. 1<=第一步步长<len/2 (len为数组长度),需要遍历第一步的各种可能;
  2. 从第二步开始只能以所在成员的数字走相应的步数,不能多不能少;
  3. 只能向数组的尾部走不能向回走;

在这里插入图片描述

🏆下一篇:华为OD机试 - 荒岛求生 - 栈Stack(Java 2023 B卷 100分)

🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.niftyadmin.cn/n/5072625.html

相关文章

超自动化加速落地,助力运营效率和用户体验显著提升|爱分析报告

RPA、iPaaS、AI、低代码、BPM、流程挖掘等在帮助企业实现自动化的同时&#xff0c;也在构建一座座“自动化烟囱”。自动化工具尚未融为一体&#xff0c;协同价值没有得到释放。Gartner于2019年提出超自动化&#xff08;Hyperautomation&#xff09;概念&#xff0c;主要从技术组…

buuctf PWN warmup_csaw_2016

下载附件&#xff0c;IDA查看 发现直接有显示flag函数 int sub_40060D() {return system("cat flag.txt"); }查看程序起始地址0x40060D ; Attributes: bp-based framesub_40060D proc near ; __unwind { push rbp mov rbp, rsp mov edi, offset comman…

【Java每日一题】— —第二十四题:编程定义一个长方形类Rectangle(2023.10.08)

&#x1f578;️Hollow&#xff0c;各位小伙伴&#xff0c;今天我们要做的是第二十四题。 &#x1f3af;问题&#xff1a; &#xff08;1&#xff09;定义成员变量&#xff1a;长&#xff08;int height&#xff09;&#xff0c;宽&#xff08;int width&#xff09;&#xf…

React xlsx(工具库) 处理表头合并

前端导出excel表格 引入xlsx插件&#xff0c;不然应该是运行不起来的(xlsx无 样式) 样式使用 xlsx-js-style 或 xlsx-style npm i xlsx xlsx中文文档 插件2 exceljs npm i exceljs exceljs中文文档 导出 例子 import { ExportExcel } from ./exportExcel/index;const columns[…

Linux 部署项目

部署 Linux 部署项目1. 宝塔部署1.1 前端部署1.2 后端部署 2. docker 部署2.1 后端部署2.2 前端部署 3. 跨域问题3.1 Nginx 代理&#xff08;推荐&#xff09;3.2 修改后端服务3.3 添加 web 全局请求拦截器 4. 域名解析DNSPod添加域名 Linux 部署项目 1. 宝塔部署 准备工作&am…

vue 2个接口同步执行

案例1&#xff1a; // 接口1的请求 const promise1 axios.get(/api/data1) // 接口2的请求 const promise2 axios.get(/api/data2) // 同步执行两个接口 Promise.all([promise1, promise2]).then(results >{ // 对两个接口返回的数据进行操作 const result1 results[0…

python学习之5个让日常编码更方便简单的库

今天为大家分享 5 个让日常编码更简单的 Python 库&#xff0c;全文3900字&#xff0c;阅读15分钟。 一、sh https://github.com/amoffat/sh 如果曾经在 Python 中使用过 subprocess 库&#xff0c;那么我们很有可能对它感到失望&#xff0c;它不是最直观的库&#xff0c;可…

大数据软件项目的数据清洗

大数据软件项目中的数据清洗是数据预处理过程中的重要环节&#xff0c;用于识别和纠正数据集中的错误、不一致性和不完整性。虽然没有专门的"数据清洗开发框架"&#xff0c;但有许多工具和库可用于数据清洗任务。以下是一些常见的数据清洗工具和库&#xff0c;可以与…