模拟行走机器人001

1、描述

链接
机器人在一个二维平面上行走,二维平面有障碍物,以坐标形式给出。机器人可以左转和右转,前行3种状态。求给定机器人行动动作数组,完成过程中的最大欧氏距离?

2、关键字

二维数组

3、思路

贪心?每次一个动作完成之后,进行最大值更新
使用map和set进行障碍物的初始化!根据map中的第一个横坐标,把该横坐标对应的所有纵坐标上有障碍物的,进行构造map映射,
参照题解
模拟这个机器人的构造过程!

3.1 如果是3个方向

如果再加一个后转,也就是直接(dir+2)%4而已!!!

4、notes

转向,东西南北,使用0-1-2-3四个数字表示,然后进行取余操作,即可根据题目中的左转右转,更新东西南北的方向!

5、复杂度

时间O(M+N)机器人动作数组和障碍物数组的长度
空间:O(N)障碍物数组的长度

6、code

# define bei 0
# define nan 2
# define xii 3
# define don 1
int x,y,dir,mx;
class Solution {
    // 当前的方向,基础,然后考虑后边的方向,写很多if eles? 还要考虑回退,遇到障碍
    // 贪心在哪?
public:
    int robotSim(vector<int>& commands, vector<vector<int>>& obstacles) {
        unordered_map<int,set<int>>obs;
        for(auto & m:obstacles){
            obs[m[0]].insert(m[1]);
        }
        x=y=mx=0;
        dir=bei;
        for(auto &cmd:commands){
            if(cmd>0){
                if(dir==bei) while(cmd && obs[x].count(y+1)==0) { --cmd ; ++y;}
                if(dir==xii) while(cmd && obs[x-1].count(y)==0) { --cmd ; --x;}
                if(dir==don) while(cmd && !obs[x+1].count(y)  ) { --cmd ; ++x;}
                if(dir==nan) while(cmd && !obs[x].count(y-1)  )  --cmd , --y;

                mx=max(mx,x*x+y*y);
            }
            if(cmd==-2) dir=(dir+3)%4;
            if(cmd==-1) dir=(dir+1)%4;

            //mx=max(mx,x*x+y*y);  // 位置不对
        }
        return mx;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值