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

news/2024/7/20 17:08:19 标签: 华为od, 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
记dp[n]为n的最小步数
那么对于n>=4时,dp[n]=min(dp[n-3],dp[n-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),查看当前专栏更新的所有题目。


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

相关文章

苍穹外卖--查看近30日营业额统计

用户统计 产品原型 所谓用户统计&#xff0c;实际上统计的是用户的数量。通过折线图来展示&#xff0c;上面这根蓝色线代表的是用户总量&#xff0c;下边这根绿色线代表的是新增用户数量&#xff0c;是具体到每一天。所以说用户统计主要统计两个数据&#xff0c;一个是总的用…

基于SSM的职业高中智慧作业试题系统设计

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;JSP 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 一、…

[开题报告]基于SpringBoot的艾滋病科普平台的设计与实现

1.选题背景 艾滋病&#xff08;艾滋病毒感染与免疫缺陷综合征&#xff09;是一种严重的传染病&#xff0c;对人类的健康和社会稳定造成了极大的影响。全球范围内&#xff0c;艾滋病已经成为公共卫生领域的重大挑战之一。尽管在科学研究和医疗技术方面取得了一定进展&#xff0…

Prime 1.0

信息收集 存活主机探测 arp-scan -l 或者利用nmap nmap -sT --min-rate 10000 192.168.217.133 -oA ./hosts 可以看到存活主机IP地址为&#xff1a;192.168.217.134 端口探测 nmap -sT -p- 192.168.217.134 -oA ./ports UDP端口探测 详细服务等信息探测 开放端口22&#x…

Web安全漏洞分析-XSS(中)

随着互联网的迅猛发展&#xff0c;Web应用的普及程度也愈发广泛。然而&#xff0c;随之而来的是各种安全威胁的不断涌现&#xff0c;其中最为常见而危险的之一就是跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;简称XSS&#xff09;。XSS攻击一直以来都是Web安全领…

CSP-坐标变换(其二)

问题描述 对于平面直角坐标系上的坐标 (x,y)&#xff0c;小 P 定义了如下两种操作&#xff1a; 拉伸 k 倍&#xff1a;横坐标 x 变为 kx&#xff0c;纵坐标 y 变为 ky&#xff1b; 旋转 θ&#xff1a;将坐标 (x,y) 绕坐标原点 (0,0) 逆时针旋转 θ 弧度&#xff08;0≤θ<…

力扣 --- 最后一个单词的长度

题目描述&#xff1a; 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 示例 1&#xff1a; 输入&#xff1a;s "Hello World&…

【STL】手撕 string类

目录 1&#xff0c;string类框架 2&#xff0c;string&#xff08;构造&#xff09; 3&#xff0c;~string&#xff08;析构&#xff09; 4&#xff0c;swap&#xff08;交换&#xff09; 5&#xff0c;string&#xff08;拷贝构造&#xff09; 1&#xff0c;常规法 2&a…