【华为OD题库-047】求最小步数-java

题目

求从坐标零点到坐标点n的最小步数,一次只能沿横坐标轴向左或向右移动2或3.

注意:途径的坐标点可以为负数
输入描述

坐标点n
输出描述

输出从坐标零点移动到坐标点n的最小步数
备注

1<= n <= 10^9
示例1:
输入

4
输出

2
说明

从坐标零点移动到4,最小需要两步,即右移2,再右移2

思路

两种方案:

1. 动态规划

n=1,至少需要两步:3 -2

n=2, 只需移动一步:2

n=3, 只需移动1步:3

记dpn为n的最小步数

那么对于n>=4时,dpn=min(dpn-3,dpn-2)+1。

可以用一个队列来模拟实现这个过程

2. 数学

要想步数最小,考虑优先走3步,对于任意大于1的正整数n:记a=n/3;b=a%3

如果b == 0,那么只需要走a步即可(即全走3步)

如果b == 2,那么只需要走a+1步(a个3步,1个2步)

如果b == 1,那么需要走a-1+2=a+1步,(a-1个3步,2个2步)

题解

java 复制代码
package hwod;

import java.util.LinkedList;
import java.util.Scanner;

public class TheMinStep {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        System.out.println(minStep(n));

    }
//动态规划
    private static int minStep(int n) {
        if (n == 1) return 2;
        LinkedList<Integer> queue = new LinkedList<>();
        queue.addLast(2);
        queue.addLast(1);
        queue.addLast(1);
        for (int i = 4; i <= n; i++) {
            int first = queue.pollFirst();
            int second = queue.peekFirst();
            queue.addLast(Math.min(first, second) + 1);
        }
        return queue.peekLast();
    }
// 数学解法
    private static int minStep2(int n) {
        if (n == 1) return 2;
        int a = n / 3, b = n % 3;
        if (b == 0) return a;
        return a + 1;
    }
}

推荐

如果你对本系列的其他题目感兴趣,可以参考华为OD机试真题及题解(JAVA),查看当前专栏更新的所有题目。

相关推荐
x-Achan几秒前
Redis实现方案:更新策略、穿透、雪崩、击穿、工具封装
java·spring boot·redis·spring·bootstrap·mybatis
patrickpdx6 分钟前
dihedral group 二面体群
数学
蜗牛互联网17 分钟前
Java 17调用gpt-transcribe实现会议录音转写与术语提示
java·人工智能·后端
吠品24 分钟前
DicomViewer24 的 CI 又红了:MPR 测试偶发失败排查记
java·服务器·前端
Wang's Blog31 分钟前
Java 项目实战: 外卖平台优化-Nginx概述与源码编译安装
java·开发语言·nginx
Eason_LYC31 分钟前
一个公开密钥放倒一片:Apache Shiro RememberMe 反序列化漏洞
java·网络安全·渗透测试·shiro·漏洞复现·反序列化·ai安全
ym hyd 1119 小时前
试题库管理系统源码 Java+SpringBoot+Vue3 前后分离
java·vue.js·spring boot·毕设
AC赳赳老秦9 小时前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
钱栈up9 小时前
mvn compile 卡死在 javac 阶段:一次类型不匹配的排查与修复
java·开发语言
吠品11 小时前
CSS图片模糊过渡:一个transition加filter就够
java·数据库·notepad++