ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【算法】【感悟】LCP 03. 机器人大冒险

2021-12-22 11:01:29  阅读:333  来源: 互联网

标签:03 终点 return tx LCP 撞墙 int ++ 大冒险


当面试官问我场景题、算法时,他们不希望看到我直接上手就写。
他们想慢慢的让我自己思考、与面试官交谈。
说出对这道题的理解。
LCP 03. 机器人大冒险
如下:
这道题,它的目的是求出机器人是否能够安全到达终点。
其中只需要判断:1、机器人能到达终点;2、机器人不会撞墙

思路最简单的方法是:模拟机器人,一步一步的走。当撞墙或者远离终点时,就返回false。到达终点则返回true。(没超时,985ms)

另一种思路:用数学的方法,优化时间复杂度,只需要判断1、能否到达终点;2、是否撞墙;即可。(0ms)

class Solution {
    // 1、不撞墙;2、能到达终点
    int n;
    public boolean robot(String command, int[][] obstacles, int x, int y) {
        this.n = command.length();
        int sx = 0, sy = 0;
        for (int i = 0; i < n; i++) {
            if (command.charAt(i) == 'U')
                sy++;
            else
                sx++;
        }
        // 是否能到达终点
        if (!canReach(command, x, y, sx, sy))
            return false;
        // 是否撞墙,如果墙在终点之外,则无需判断
        for (int[] obstacle : obstacles) {
            if (obstacle[0] > x || obstacle[1] > y)
                continue;
            if (canReach(command, obstacle[0], obstacle[1], sx, sy)) {
                return false;
            }
        }
        return true;
    }

    
    public boolean canReach(String cmd, int tx, int ty, int x, int y) {
        int round = Math.min(tx/x, ty/y);
        int nx = round * x, ny = round * y;
        if (nx == tx && ny == ty)
            return true;
        for (int i = 0; i < n; i++) {
            if (cmd.charAt(i) == 'U')
                ny++;
            else 
                nx++;
            if (nx > tx || ny > ty)
                return false;
            if (nx == tx && ny == ty)
                return true;
        }
        return true;
    }
}

我每次拿到一个算法,就直接去想解法,dfs、bfs、动态规划、贪心、并查集。而忽略了题目本身。这样做出来的答案,不会是最优解。

我拿到一道题时,需要把这道题的解答流程写出来,比如这道题就是:1、判断可以到达终点;2、判断是否会撞墙。
比如状态题:股票买卖1~5,需要判断多种情况,流程树。

所以我以后拿到题目,最开始不要想着用什么数据结构、算法来解决。而是专注于题目本身,需要我干什么。

标签:03,终点,return,tx,LCP,撞墙,int,++,大冒险
来源: https://blog.csdn.net/weixin_42295814/article/details/122079933

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有