874. 模拟行走机器人 模拟+哈希存储

这篇具有很好参考价值的文章主要介绍了874. 模拟行走机器人 模拟+哈希存储。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接力扣

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

  • -2 :向左转 90 度
  • -1 :向右转 90 度
  • 1 <= x <= 9 :向前移动 x 个单位长度

在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位于网格点  obstacles[i] = (xi, yi) 。

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

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

注意:

  • 北表示 +Y 方向。
  • 东表示 +X 方向。
  • 南表示 -Y 方向。
  • 西表示 -X 方向。

示例 1:

输入:commands = [4,-1,3], obstacles = []
输出:25
解释:
机器人开始位于 (0, 0):
1. 向北移动 4 个单位,到达 (0, 4)
2. 右转
3. 向东移动 3 个单位,到达 (3, 4)
距离原点最远的是 (3, 4) ,距离为 32 + 42 = 25

示例 2:

输入:commands = [4,-1,4,-2,4], obstacles = [[2,4]]
输出:65
解释:机器人开始位于 (0, 0):
1. 向北移动 4 个单位,到达 (0, 4)
2. 右转
3. 向东移动 1 个单位,然后被位于 (2, 4) 的障碍物阻挡,机器人停在 (1, 4)
4. 左转
5. 向北走 4 个单位,到达 (1, 8)
距离原点最远的是 (1, 8) ,距离为 12 + 82 = 65

思路 

题目是一个模拟,用一个点表示 (x,y,direction) 分别表示点的横纵坐标和方向。由于有障碍物,每次移动时,每移动一步,就查看当前的(x,y)坐标是否有障碍物,如果有就停止。障碍物用哈希结构来保存。

  typedef struct point{
        int x ; 
        int y ; 
        int direction ; // 0 , 1, 2, 3 北,东,南,西
    }Point;
    int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
        // 初始化起点,方向
        int dx[4] = {1,0,-1,0};
        int dy[4] = {0,-1,0,1};
        Point p ; 
        p.x = 0 ; 
        p.y = 0 ;
        p.direction = 3 ; 

        // 用哈希记录 障碍物 

        set<pair<int,int>> vis ; 
        for(auto & i : obstacles){
            vis.emplace(i[0],i[1]) ; 
        }
        int ans = 0 ; 
        
        for(int i = 0 ; i<commands.size() ; i++ ){
            
            if(commands[i] ==-2 ){
                // 左转
                p.direction= (p.direction-1+4)%4 ; 
            }else if (commands[i] ==-1){
                // 右转
                p.direction= (p.direction+1)%4 ; 
            }else{
                int step = commands[i] ; 
                for(int i = 0 ; i<step; i++ ){
                    int nx = p.x +dx[p.direction] ; 
                    int ny = p.y +dy[p.direction] ; 
                    if(vis.count({nx,ny})) {
                        break ; 
                    }
                    p.x = nx ; 
                    p.y = ny ;
                    ans = max(ans , p.x*p.x +p.y*p.y);
                }
                
                
            }
        }
        return ans ; 
    }

扩展

pair<int,int>的常用法
 

1. 创建

pair<int, int> myPair(3, 7);

2. 获取pair<int, int>的第一个和第二个元素

pair<int, int> myPair(3, 7);
int firstElement = myPair.first;  // 获取第一个元素,值为3
int secondElement = myPair.second;  // 获取第二个元素,值为7

3. 修改pair<int, int>的值

myPair.first = 10;  // 修改第一个元素的值为10
myPair.second = 20;  // 修改第二个元素的值为20

4. 使用pair<int, int>作为容器的元素:文章来源地址https://www.toymoban.com/news/detail-674881.html

vector<std::pair<int, int>> myVector;
myVector.push_back(std::make_pair(3, 7));  // 将一个pair<int, int>对象添加到vector中

map<std::string, std::pair<int, int>> myMap;
myMap["key"] = std::make_pair(3, 7);  // 将一个pair<int, int>对象关联到一个字符串键上

到了这里,关于874. 模拟行走机器人 模拟+哈希存储的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 每日一题(set集合)-874. 模拟行走机器人

    874. 模拟行走机器人 初始方向朝y轴正方向,遇到指令command == -1 则向右转, 若为 -2 则向左转 定义方向[-1,0]、[0,1]、[1,0]、[0,-1] 分别为朝x轴负方向, y轴正方向, x轴正方向,y轴负方向 初始方向为[0,1], 若向右转 则方向变为[-1,0]、若向左转方向变为[1,0]。 若向右转则不断 向右

    2024年02月13日
    浏览(37)
  • 暑期代码每日一练Day3:874. 模拟行走机器人

    题目 874. 模拟行走机器人 分析 这道题就是个简单的模拟 主要有两点考察点: 对 方向数组 的运用 方向数组存储的是各个方向的单位向量,也即: 方向 X Y 向北 0 1 向东 1 0 向南 0 -1 向西 -1 0 存储在数组中,则是方向数组: 我们很容易发现: 我们可以使用一个变量 j 来指示当

    2024年02月16日
    浏览(45)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 哈希

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月15日
    浏览(37)
  • 【算法-数组-pyhton】模拟行走机器人

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年02月12日
    浏览(37)
  • 【LeetCode 算法】Walking Robot Simulation 模拟行走机器人 - 二分

    机器人在一个无限大小的 XY 网格平面上行走,从点 (0, 0) 处开始出发,面向北方。该机器人可以接收以下三种类型的命令 commands : -2 :向左转 90 度 -1 :向右转 90 度 1 = x = 9 1 = x = 9 1 = x = 9 :向前移动 x 个单位长度 在网格上有一些格子被视为障碍物 obstacles 。第 i 个障碍物位

    2024年02月11日
    浏览(47)
  • 【经典LeetCode算法题目专栏分类】【第5期】贪心算法:分发饼干、跳跃游戏、模拟行走机器人

    《博主简介》 小伙伴们好,我是阿旭。专注于人工智能AI、python、计算机视觉相关分享研究。 ✌ 更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍 感谢小伙伴 们点赞、关注! class   Solution :      def   findContentChildren ( self ,  g :  List [ int ],  s

    2024年02月04日
    浏览(52)
  • leetcode刷题(字符串相加、包含每个查询的最小区间、模拟行走机器人、环形子数组的最大和、满足不等式的最大值、四数之和、树中距离之和)

    目录 1、字符串相加 2、包含每个查询的最小区间 3、模拟行走机器人 4、环形子数组的最大和 5、满足不等式的最大值 6、四数之和 7、 树中距离之和

    2024年02月10日
    浏览(45)
  • 能“出汗”,会“呼吸”的户外行走机器人

    美国亚利桑那州立大学(ASU)科学家研制出了世界上第一个能像人类一样出汗、颤抖和呼吸的户外行走机器人模型。这个机器人名叫ANDI,是一个能模仿人类出汗的热敏“热模型”。 ANDI 身上不仅有可以使它行走的关节,还有其他机器人身上都没有的东西——它浑身上下还有 35

    2024年02月14日
    浏览(26)
  • 论文阅读:四足机器人对抗运动先验学习稳健和敏捷的行走

    论文:Learning Robust and Agile Legged Locomotion Using Adversarial Motion Priors 进一步学习:AMP,baseline方法,TO 介绍了一种新颖的系统,通过使用对抗性运动先验 (AMP) 使四足机器人在复杂地形上实现稳健和敏捷的行走。主要贡献包括为机器人生成AMP数据集,并提出一种教师-学生训练框架

    2024年02月21日
    浏览(52)
  • 机器人避障路径规划的MATLAB模拟退火算法

    机器人避障路径规划的MATLAB模拟退火算法 在机器人路径规划中,避免障碍物是一个重要的问题。模拟退火算法是一种启发式优化算法,可以用于解决路径规划问题。在本文中,我们将使用MATLAB实现一个基于模拟退火算法的机器人避障路径规划程序。 首先,我们需要定义问题

    2024年02月06日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包