当前位置: 首页 > news >正文

暑期代码每日一练Day3:874. 模拟行走机器人

题目

874. 模拟行走机器人
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


分析

这道题就是个简单的模拟
主要有两点考察点:

  • 方向数组的运用
    方向数组存储的是各个方向的单位向量,也即:
方向XY
向北01
向东10
向南0-1
向西-10

存储在数组中,则是方向数组:

int[] dx = {0, 1, 0, -1};
int[] dy = {1, 0, -1, 0};

我们很容易发现:

dx[0]  //北方
dx[1]  //东方
dx[2]  //南方
dx[3]  //西方

我们可以使用一个变量j来指示当前处于什么方向,j始终只有0、1、2、3这四个取值,指示北、东、南、西四个方向,那么怎么实现j在这三个取值之间来回有序切换呢?
我们可以利用去模运算,假设我们初始面向北方,即j为0,那么当我们想向左转的时候,是面向西方,则j要相应的变为3,这时,我们进行的操作是(j-1+4)%4,为什么还要+4呢?因为负数对正数去模,还是负数,就出了范围,这里我们通过加上一个模数4的倍数,来使结果始终为正数。
因此,我们总结转向操作的实现:

j = (j-1+4)%4;   // 左转
j = (j+1+4)%4;   // 右转
  • 怎么实现快速判断当前点是否在障碍物点集中
    这里我们可以利用HashSet
    把障碍物点以String字符串的形式存放在HashSet中。
    在Java中,如果您在HashSet中存放字符串,那么每次调用contains方法,底层判断两个字符串相等与否时,调用的是equals方法而不是==运算符。
    这是因为==运算符比较的是两个对象的引用地址,即它们是否指向同一个内存地址。而String类重写了equals方法,比较的是两个字符串的内容是否相等,而不是它们的引用地址

代码

class Solution {public int robotSim(int[] commands, int[][] obstacles) {// 设置方向数组 初始为y轴方向 往大是向右转,往小是向左转int[] dx = {0, 1, 0, -1};int[] dy = {1, 0, -1, 0};int cur_x = 0,cur_y = 0; // 当前位置 初始为0int max_dis = 0;         // 最大欧氏距离// 创建一个障碍物点集PointSet pointSet = new PointSet(obstacles);int j = 0;  //控制方向   始终在0 1 2 3的范围内for(int i=0;i<commands.length;i++){int op = commands[i];if(op>=1&&op<=9){int[] point = new int[2];  //下一步试探点while(op>0){point[0] = cur_x+dx[j];point[1] = cur_y+dy[j];//试探下一步能不能走if(pointSet.contains(point))   //被建筑物挡住不能走break;else{   //能走,则走,且在走的过程中把最大欧氏距离的平方更新cur_x = cur_x+dx[j];cur_y = cur_y+dy[j];max_dis = Math.max(max_dis,cur_x*cur_x+cur_y*cur_y);}op--;}}else if(op==-2){j = (j-1+4)%4;   // 左转continue;}else if(op==-1){j = (j+1+4)%4;   // 右转continue;}}return max_dis;}
}
//哈希set 高效判断该点是否存在
public class PointSet {private HashSet<String> pointSet;// 构造函数 参数是一个二维点集public PointSet(int[][] points) {pointSet = new HashSet<>();// 把点集中的点都加进去for (int[] point : points) {pointSet.add(point[0] + "," + point[1]);  //以字符串形式存储}}public boolean contains(int[] point) {return pointSet.contains(point[0] + "," + point[1]);}
}

相关文章:

暑期代码每日一练Day3:874. 模拟行走机器人

题目 874. 模拟行走机器人 分析 这道题就是个简单的模拟 主要有两点考察点&#xff1a; 对方向数组的运用 方向数组存储的是各个方向的单位向量&#xff0c;也即&#xff1a; 方向XY向北01向东10向南0-1向西-10 存储在数组中&#xff0c;则是方向数组&#xff1a; in…...

肖sir___环境相关的面试题

环境相关面试题 1、请简述多有米环境的搭建、用到了哪些工具和流程介绍? jdk、服务器、代码包、数据库 2、查看当前端口被哪个应用程序占用了&#xff1f; netstat -ntlp |grep 端口号 lsof -i &#xff1a;端口号 ps -ef|grep 端口号 3、Tomcat和Nginx的区别&#xff0c;ngi…...

代理IP、Socks5代理和SK5代理的前沿技术与未来发展趋势

代理IP的前沿技术应用 人工智能与智能代理&#xff1a;结合人工智能技术&#xff0c;代理IP可以更加智能地处理网络请求和数据流&#xff0c;提高代理效率和准确性。区块链与去中心化代理&#xff1a;通过区块链技术&#xff0c;代理IP可以实现去中心化管理和身份验证&#xf…...

VM(CentOS7安装和Linux连接工具以及换源)

目录 一、Linux意义 二、安装VMWare 三、centos7安装 1、正式安装CentOS7&#xff1a; 2、安装不了的解决方案 2.1常见问题——虚拟机开机就黑屏的完美解决办法 3、查看、设置IP地址 ① 查看ip地址&#xff1a;ip addr 或者 ifconfig&#xff0c; 注意与windows环境的区别…...

阿里云斩获 4 项年度云原生优秀案例丨阿里云云原生 6 月动态

云原生月度动态 ✦ CLOUD NATIVE 云原生是企业数字创新的最短路径。 《阿里云云原生每月动态》&#xff0c;从趋势热点、产品新功能、服务客户、开源与开发者动态等方面&#xff0c;为企业提供数字化的路径与指南。 本栏目每月更新。 01 趋势热点 &#x1f947; 阿里云 S…...

dede图片集上传图片时出错显示FILEID的解决办法

如果遇到过这问题的&#xff0c;就可以照此方法尝试了。 某日&#xff0c;某使用deecms v5.5的网站在后台上传图片时出现如下错误&#xff1a; 作为web生手的我很是迷茫。印象里之前并没有做什么改动&#xff0c;于是百思不得其解。Google、百度、DeDe官网搜索了一大圈&#xf…...

【亲测有效】 通过mysql指令 导出数据库中表名 和 表名的备注

标题你可以使用以下MySQL指令来导出数据库中表名和表名的备注&#xff1a; SELECT table_name, table_comment FROM information_schema.tables WHERE table_schema 你的数据库名;将上述指令中的"你的数据库名"替换为你实际使用的数据库名称&#xff0c;执行该指…...

【Nginx08】Nginx学习:HTTP核心模块(五)长连接与连接处理

Nginx学习&#xff1a;HTTP核心模块&#xff08;五&#xff09;长连接与连接处理 HTTP 基础知识大家掌握的怎么样呀&#xff1f;对于长连接这一块的内容应该也不是什么新鲜东西了吧。毕竟 HTTP1.1 都已经发布这么久了。今天主要来看的就是长连接相关的配置&#xff0c;另外还会…...

第八十五天学习记录:C++核心:内存分区模型

内存分区模型 C程序在执行时&#xff0c;将内存大方向划分为4个区域 1、代码区&#xff1a;存放函数体的二进制代码&#xff0c;由操作系统进行管理 2、全局区&#xff1a;存放全局变量和静态变量以及常量 3、栈区&#xff1a;由编译器自动分配释放&#xff0c;存放函数的参数…...

Chrome远程调试webview

网址 谷歌远程调试解决方案 https://blog.csdn.net/m0_56516186/article/details/131260563Chrome远程调试webview https://blog.csdn.net/weixin_44801980/article/details/117755550...

爬虫与反爬虫的攻防对抗

一、爬虫的简介 1 概念 爬虫最早源于搜索引擎&#xff0c;它是一种按照一定的规则&#xff0c;自动从互联网上抓取信息的程序&#xff0c;又被称为爬虫&#xff0c;网络机器人等。按爬虫功能可以分为网络爬虫和接口爬虫&#xff0c;按授权情况可以分为合法爬虫和恶意爬虫。恶…...

【机器学习】特征工程 - 字典特征提取

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 字典特征提取 一、特征提取API一、提取数字特征二、特征名字三、返回原始数据特征工…...

用户交互----进入游戏

一、增加交互----点击和拖动 1、点击鼠标画点的程序 设置 import pygame # Setup pygame.init() screen pygame.display.set_mode([800,600]) pygame.display.set_caption("单击画圆点") keep_going True RED (255,0,0) …...

排序算法 - 快速排序(4种方法实现)

快速排序 快速排序是啥&#xff1f;三数取中&#xff1a;1.挖坑法&#xff08;推荐掌握&#xff09;2.前后指针法&#xff08;推荐掌握&#xff09;3.左右指针法&#xff08;霍尔版本&#xff09;&#xff08;容易出错&#xff09;4.非递归实现 本篇文章的源代码在这&#xff0…...

C++入门知识点

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

开眼界了,AI绘画商业化最强玩家是“淘宝商家”

图片来源&#xff1a;由无界AI生成 7月&#xff0c;2023世界人工智能大会在上海召开&#xff0c;顶尖的投资人、创业者都去了。 创业者吐槽&#xff1a;投我啊&#xff0c;我很强。 投资人反问&#xff1a;你的商业模式是什么&#xff1f;护城河是什么&#xff1f; 创业者投资人…...

机器学习与深度学习——自定义函数进行线性回归模型

机器学习与深度学习——自定义函数进行线性回归模型 目的与要求 1、通过自定义函数进行线性回归模型对boston数据集前两个维度的数据进行模型训练并画出SSE和Epoch曲线图&#xff0c;画出真实值和预测值的散点图&#xff0c;最后进行二维和三维度可视化展示数据区域。 2、通过…...

大屏项目也不难

项目环境搭建 使用create-vue初始化项目 npm init vuelatest准备utils模块 业务背景&#xff1a;大屏项目属于后台项目的一个子项目&#xff0c;用户的token是共享的 后台项目 - token - cookie 大屏项目要以同样的方式把token获取到&#xff0c;然后拼接到axios的请求头中…...

c#webclient请求中经常出现的几种异常

WebClient是.NET Framework提供的用于HTTP请求的类&#xff0c;如果在使用WebClient时遇到异常&#xff0c;我们可以根据具体的异常类型进行处理。 以下是一些常见的WebClient异常及其处理方法&#xff1a; System.Net.WebException WebException通常是由于请求超时、网络连…...

设计模式-原型模式

目录 一、传统方式 二、原型模式 三、浅拷贝和深拷贝 克隆羊问题&#xff1a; 现在有一只羊tom&#xff0c;姓名为: tom,年龄为: 1&#xff0c;颜色为: 白色&#xff0c;请编写程序创建和tom羊属性完全相同的10只羊。 一、传统方式 public class Client {public static vo…...

微软PowerBI考试 PL300-使用适用于 Power BI 的 Copilot 创建交互式报表

微软PowerBI考试 PL300-使用适用于 Power BI 的 Copilot 创建交互式报表 Microsoft Power BI 可帮助您通过交互式报表准备数据并对数据进行可视化。 如果您是 Power BI 的新用户&#xff0c;可能很难知道从哪里开始&#xff0c;并且创建报表可能很耗时。 通过适用于 Power BI …...

如何从零开始建设一个网站?

当你没有建站的基础和建站的知识&#xff0c;那么应该如何开展网站建设和网站管理。而今天的教程是不管你是为自己建站还是为他人建站都适合的。本教程会指导你如何进入建站&#xff0c;将建站的步骤给大家分解&#xff1a; 首先我们了解一下&#xff0c;建站需要那些步骤和流程…...

git小乌龟不显示图标状态解决方案

第一步 在开始菜单的搜索处&#xff0c;输入regedit命令&#xff0c;打开注册表。 第二步 在注册表编辑器中&#xff0c;找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 这一项。 第三步 让Tortoise相关的项目排在前…...

产品经理课程(九)

从需求到功能设计 &#xff08;一&#xff09;复习 产品规划&#xff1a;产品定位、阶段性计划 产品定位&#xff1a;产品画布&#xff08;9个步骤&#xff1b;最重要的是先解决什么问题&#xff09; &#xff08;Roadmap&#xff09;目标要素&#xff1a;时间、事项、里程碑…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1开通指南及使用心得

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年CSDN全站排名top 28。 &#x1f3c6;数年电商行业从业经验&#xff0c;AWS/阿里云资深使用用…...

玩转抖音矩阵:核心玩法与高效运营规则

一、 抖音矩阵&#xff1a;流量协同的生态网络 抖音矩阵&#xff0c;本质是运营一个相互关联、互相支持的抖音账号群。核心目标在于通过账号间的深度协同&#xff08;内容、流量、粉丝&#xff09;&#xff0c;打破单个账号的流量天花板&#xff0c;实现11>2的效果。它不仅…...

小白的进阶之路系列之十----人工智能从初步到精通pytorch综合运用的讲解第三部分

本文将介绍Autograd基础。 PyTorch的Autograd特性是PyTorch灵活和快速构建机器学习项目的一部分。它允许在一个复杂的计算中快速而简单地计算多个偏导数(也称为梯度)。这个操作是基于反向传播的神经网络学习的核心。 autograd的强大之处在于它在运行时动态地跟踪你的计算,…...

互联网大厂Java求职面试:云原生架构下的微服务网关与可观测性设计

互联网大厂Java求职面试&#xff1a;云原生架构下的微服务网关与可观测性设计 郑薪苦怀着忐忑的心情走进了会议室&#xff0c;对面坐着的是某大厂的技术总监张总&#xff0c;一位在云原生领域有着深厚积累的专家。 第一轮面试&#xff1a;微服务网关的设计挑战 张总&#xf…...

二叉树的遍历总结

144.二叉树的前序遍历(opens new window)145.二叉树的后序遍历(opens new window)94.二叉树的中序遍历 二叉数的先中后序统一遍历法 public static void preOrder(BiTree root){BiTree p root;LinkedList<BiTree> stack new LinkedList<>();while(p ! null ||…...

【PmHub面试篇】PmHub中基于Redis加Lua脚本的计数器算法限流实现面试专题解析

你好&#xff0c;欢迎来到本次关于PmHub中基于Redis加Lua脚本的计数器算法限流实现的面试系列分享。在这篇文章中&#xff0c;我们将深入探讨这一技术领域的相关面试题预测。若想对相关内容有更透彻的理解&#xff0c;强烈推荐参考之前发布的博文&#xff1a;【PmHub后端篇】Pm…...