JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2023-07-16
目录

赛车Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

你的赛车可以从位置 0 开始,并且速度为 +1 ,在一条无限长的数轴上行驶。赛车也可以向负方向行驶。赛车可以按照由加速指令 'A' 和倒车指令 'R' 组成的指令序列自动行驶。

  • 当收到指令 'A' 时,赛车这样行驶:
    • position += speed
    • speed *= 2
  • 当收到指令 'R' 时,赛车这样行驶:
    • 如果速度为正数,那么speed = -1
    • 否则 speed = 1

当前所处位置不变。 例如,在执行指令 "AAR" 后,赛车位置变化为 0 --> 1 --> 3 --> 3 ,速度变化为 1 --> 2 --> 4 --> -1 。

给你一个目标位置 target ,返回能到达目标位置的最短指令序列的长度。

示例 1:

输入:target = 3
输出:2
解释:
最短指令序列是 "AA" 。
位置变化 0 --> 1 --> 3 。

示例 2:

输入:target = 6
输出:5
解释:
最短指令序列是 "AAARA" 。
位置变化 0 --> 1 --> 3 --> 7 --> 7 --> 6 。

提示:

  • 1 <= target <= 104

# 思路

Queue

# 解法



class Solution {
    public int racecar(int target) {
        if(target == 0){
            return 0;
        }
        Set<String> memory = new HashSet<>();
        memory.add("0@1");
        Queue<int[]> queue = new LinkedList<>();
        queue.add(new int[]{0,1,0});    //position,speed,count
        int[] curr;
        while(!queue.isEmpty()){
            curr = queue.poll();
            int[] plan1 = new int[]{curr[0]+curr[1],curr[1]*2,curr[2]+1};
            if(plan1[0] == target){
                return plan1[2];
            }
            if(memory.add(plan1[0]+"@"+plan1[1]) && plan1[0] > 0){
                queue.add(plan1);
            }
            int[] plan2 = new int[]{curr[0],curr[1],curr[2]+1};
            if(plan2[1] > 0){
                plan2[1] = -1;
            }else{
                plan2[1] = 1;
            }
            if(memory.add(plan2[0]+"@"+plan2[1]) && plan2[0] > 0){
                queue.add(plan2);
            }
        }
        return -1;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1686. 石子游戏VI Java
08-18
02
1688. 比赛中的配对次数 Java
08-18
03
1687. 从仓库到码头运输箱子 Java
08-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式