OJ练习第139题——模拟行走机器人

news2024/11/27 18:47:46

模拟行走机器人

力扣链接:874. 模拟行走机器人

题目描述

机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands :

-2 :向左转 90 度
-1 :向右转 90 度
1 <= x <= 9 :向前移动 x 个单位长度
在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位于网格点 obstacles[i] = (xi, yi) 。

机器人无法走到障碍物上,它将会停留在障碍物的前一个网格方块上,但仍然可以继续尝试进行该路线的其余部分。

返回从原点到机器人所有经过的路径点(坐标为整数)的最大欧式距离的平方。(即,如果距离为 5 ,则返回 25 )

示例

在这里插入图片描述

官方题解

class Solution {
    public int robotSim(int[] commands, int[][] obstacles) {
        int[][] dirs = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
        int px = 0, py = 0, d = 1;
        Set<Integer> set = new HashSet<Integer>();
        for (int[] obstacle : obstacles) {
            set.add(obstacle[0] * 60001 + obstacle[1]);
        }
        int res = 0;
        for (int c : commands) {
            if (c < 0) {
                d += c == -1 ? 1 : -1;
                d %= 4;
                if (d < 0) {
                    d += 4;
                }
            } else {
                for (int i = 0; i < c; i++) {
                    if (set.contains((px + dirs[d][0]) * 60001 + py + dirs[d][1])) {
                        break;
                    }
                    px += dirs[d][0];
                    py += dirs[d][1];
                    res = Math.max(res, px * px + py * py);
                }
            }
        }
        return res;
    }
}

Java代码

class Solution {
    private int[][] dir = {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
    private HashSet<String> set;
    public int robotSim(int[] commands, int[][] obstacles) {
        int[] position = {0, 0};
        set = new HashSet<>();
        for (int i = 0; i < obstacles.length; i++) {
            int[] pos = obstacles[i];
            String p = pos[0] + "_" + pos[1];
            set.add(p);
        }
        int derc = 0;
        int max = 0;
        for (int i = 0; i < commands.length; i++) {
            switch (commands[i]) {
                case -1: {
                    derc = (derc + 1 ) % 4;
                    break;
                }
                case -2: {
                    derc = (derc - 1 + 4) % 4;
                    break;
                }
                default: {
                    walk(position, derc, commands[i]);
                }
            }
            max = Math.max(position[1] * position[1] + position[0] * position[0], max);
        }
        return max;
    }
    public void walk(int[] pos, int derc, int length) {
        int[] delta = dir[derc];
        while (length > 0) {
            pos[0] += delta[0];
            pos[1] += delta[1];
            if (set.contains(pos[0] + "_" + pos[1])) {
                pos[0] -= delta[0];
                pos[1] -= delta[1];
                break;
            }
            length--;
        }
    }
}

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/walking-robot-simulation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

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

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

相关文章

Pytorch:搭建卷积神经网络完成MNIST分类任务

2023.7.18 MNIST百科&#xff1a; MNIST数据集简介与使用_bwqiang的博客-CSDN博客 数据集官网&#xff1a;MNIST handwritten digit database, Yann LeCun, Corinna Cortes and Chris Burges MNIST数据集获取并转换成图片格式&#xff1a; 数据集将按以图片和文件夹名为标签的…

青岛大学_王卓老师【数据结构与算法】Week05_13_队列的顺序表示和实现1_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c; 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础…

DeepSpeed系列篇1:零门槛上手DeepSpeed实战(服务器部署及训练过程详解SFT)

1、建立虚拟环境 conda create -n dsnew python3.10 2、安装pytorch conda install pytorch torchvision torchaudio pytorch-cuda11.7 -c pytorch -c nvidia 3、安装deepspeed pip install deepspeed 4、下载DeepSpeedExamples并安装依赖 https://github.com/microsof…

一文了解DDD分层架构演进

1.3 分层架构演进 1.3.1 传统四层架构 将领域模型和业务逻辑分离出来&#xff0c;并减少对基础设施、用户界面甚至应用层逻辑的依赖&#xff0c;因为它们不属业务逻辑。将一个夏杂的系统分为不同的层&#xff0c;每层都应该具有良好的内聚性&#xff0c;并且只依赖于比其自身更…

arduinoIDE2.1.1最新版升级开发板(esp32-2.0.3升级2.0.10)方法总结(esp8266升级通用)

一、arduinoIDE 升级最新版 2.1.1方法 1.1.通过IDE2.x直接升级(推荐,速度还可以) 1.2.官网下载安装包覆盖升级(地址https://www.arduino.cc/en/software) 1.3 ESP8266升级方法雷同可参考(原理一样,最新好像是3.1.2) https://github.com/esp8266/Arduino/releases http…

C++入门知识点

目录 命名空间 命名空间定义 命名空间使用 法一&#xff1a;加命名空间名称及作用域限定符&#xff1a;&#xff1a; 法二&#xff1a;使用using部分展开&#xff08;授权&#xff09;某个命名空间中的成员 法三&#xff1a;使用using对整个命名空间全部展开&#xff08;授权…

Windows修改mysql服务的root密码

目录 步骤1、停止mysql服务2、使用命令行启动mysql服务&#xff0c;跳过密码验证3、密码置空4、关闭命令行启动的mysql服务并正常启动5、修改root密码 参考 步骤 1、停止mysql服务 以管理员身份打开终端&#xff0c;输入指令net stop mysql停止MySQL服务&#xff0c;停止服务…

PBOOTCMS登录请求发生错误,您可按照如下方式排查: 1、试着删除根目录下runtime目录,刷新页面重试;2、检查系统会话文件存储目录是否具有写入权限;

PBOOTCMS后台登录请求发生错误&#xff0c;您可按照如下方式排查&#xff1a; 1、试着删除根目录下runtime目录&#xff0c;刷新页面重试;2、检查系统会话文件存储目录是否具有写入权限&#xff1b; 以上提示其实就是&#xff0c;表单提交校验失败&#xff0c;请刷新后重试的提…

U盘文件修复怎么做?简单3步,快速修复u盘文件!

“很离谱&#xff01;由于有些文件存在错误&#xff0c;我想将这些错误文件修复&#xff0c;但在操作过程中&#xff0c;不知为什么所有的数据都被删除了。U盘文件修复应该怎么做呀&#xff1f;是不是我的操作方法有误呢&#xff1f;” U盘使用时间长了之后&#xff0c;很可能会…

【分布鲁棒、状态估计】分布式鲁棒优化电力系统状态估计研究[几种算法进行比较](Matlab代码实现)

&#x1f4a5;1 概述 文献来源&#xff1a; 摘要&#xff1a; 能源市场的自由化、可再生能源的渗透、先进的计量能力以及对情境感知的需求&#xff0c;都要求进行系统范围的电力系统状态估计&#xff08;PSSE&#xff09;。然而&#xff0c;由于互联的复杂性、实时监测中的通信…

MySQL八股学习记录6-日志from小林coding

MySQL八股学习记录6-日志from小林coding MySQL日志分类undo logBuffer Poolredo logbinlogredo log 和undo log有什么区别主从复制是如何实现update语句执行过程为什么需要两阶段提交 MySQL日志分类 undo log:InnoDB存储引擎层生成的日志,实现事务中的原子性,主要用于事务回滚…

学习记录——SpectFormer、DilateFormer、ShadowFormer、MISSFormer

SpectFormer: Frequency and Attention is what you need in a Vision Transformer, arXiv2023 频域混合注意力SpectFormer 2023 论文&#xff1a;https://arxiv.org/abs/2304.06446 代码&#xff1a;https://badripatro.github.io/SpectFormers/ 摘要视觉变压器已经成功地应用…

No.2(4)——双指针解决柱子间最大面积

已知现在有几根柱子成有序排列&#xff0c;求出两根柱子之间围成面积的最大值。 不难想到&#xff0c;只需要将每两个柱子之间的面积计算一次并找出最大值&#xff0c;即可找到答案&#xff0c;但采用双指针法可以有效降低重复计算&#xff1a;从数组的两侧开始移动左右两个指针…

Elasticsearch SQL 详解

Elasticsearch SQL 是一个 X-Pack 组件&#xff0c;允许用户使用类似 SQL 的语法在 ES 中进行查询。用户可以在 REST、JDBC、命令行中使用 SQL 在 ES 执行数据检索和数据聚合操作。ES SQL 有以下几个特点&#xff1a; 本地集成&#xff0c;SQL 模块是 ES 自己构建的&#xff0…

数据库| 中国研究数据服务平台

数据哪里查&#xff0c;查不到&#xff0c;怎么办&#xff1f; 今天分享一个数据库|中国研究数据服务平台&#xff08;CNRDS&#xff09; 中国研究数据服务平台&#xff08;Chinese Research Data Services&#xff0c;简称CNRDS&#xff09;&#xff0c;是上海经禾信息技术有…

HCIA|详解Telnet协议

一、前言 今天翻到了之前写的Telnet协议的实验&#xff0c;由于该篇文章创作于开始写作的初期&#xff0c;文章结构简单、布局潦草&#xff0c;但实验内容是完整的&#xff0c;因此本篇文章将对Telnet技术进行详解&#xff0c;希望能够对大家提供帮助。在本文中&#xff0c;将从…

ECharts is not Loaded -- echarts里china.json与china.js有何区别

echarts官方提示他们的地图json测绘不符合中国官方标准不提供下载 如下图 china.json china.js 可以很明显的看出地图山东与辽宁部分堆到一起的情况, 接下来换成china.js vue项目&#xff0c;要引入china.js&#xff0c;直接import引入会报错&#xff1a;ECharts is not Loa…

【SCI征稿】IEEE旗下中科院1区(TOP),有关计算机的广泛领域研究

期刊简介&#xff1a; 出版社&#xff1a;IEEE 影响因子&#xff1a;IF&#xff08;2022&#xff09;10.5-11.0 期刊分区&#xff1a;JCR1区&#xff0c;中科院1区&#xff08;TOP&#xff09; 检索情况&#xff1a;SCIE&EI 双检 自引率&#xff1a;13.20% 国人占比&…

在Illustrator中创建 3D 冰淇淋模型对象

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 一旦你学会了如何在Illustrator中制作一个对象3D&#xff0c;你可以前往Envato Elements&#xff0c;在那里你可以找到大量的3D设计来激发你的灵感。这个基于订阅的市场拥有超过 2&#xff0c;000 个 Illus…

国外广告联盟和国内广告联盟的优劣势是什么

国外广告联盟和国内广告联盟在一些方面存在一些差异和优劣势。以下是对比它们的一些常见优劣势&#xff1a; 一、国外广告联盟优势&#xff1a; 1、国际资源&#xff1a;国外广告联盟拥有更广泛的国际媒体资源&#xff0c;能够帮助广告主拓展全球市场&#xff0c;进一步提高国…