美文网首页leetcode算法
780. 到达终点 - 每日一题

780. 到达终点 - 每日一题

作者: 刘翊扬 | 来源:发表于2022-04-09 13:27 被阅读0次

780. 到达终点 - 力扣(LeetCode) (leetcode-cn.com)

给定四个整数 sx , sy ,tx 和 ty,如果通过一系列的转换可以从起点 (sx, sy) 到达终点 (tx, ty),则返回 true,否则返回 false。

从点 (x, y) 可以转换到 (x, x+y) 或者 (x+y, y)。

示例 1:

输入: sx = 1, sy = 1, tx = 3, ty = 5
输出: true
解释:
可以通过以下一系列转换从起点转换到终点:
(1, 1) -> (1, 2)
(1, 2) -> (3, 2)
(3, 2) -> (3, 5)

示例 2:
输入: sx = 1, sy = 1, tx = 2, ty = 2
输出: false

示例 3:
输入: sx = 1, sy = 1, tx = 1, ty = 1
输出: true

提示:

  • 1 <= sx, sy, tx, ty <= 109

思路分析

大部分的人一般都会惯性思维死劲想着怎么从(sx, sy)推到(tx, ty),
蛋式由于可以变换的情况非常多,特别是当起点与终点的差距比较大的时候。如果我们逆向思考呢,
从(tx, ty)推到(sx, sy),则时只能有一种操作,就是将tx、ty中较大值减去较小值(因为顺推的时候是(x, y)
可以转换到 (x, x+y) 或者 (x+y, y),则逆推的时候只能将较大者减去较小者),这样思维方式确实很妙!

public bool reachingPoints(int sx, int sy, int tx, int ty) {
        while (sx <= ty && sy <= ty){//因为sx, sy, tx, ty 是范围在 [1, 10^9] 的整数,逆推不能出界
            if (sx == tx && sy == ty){//判断是否到达了起始值
                return true;
            }
            //每次逆推只能有tx、ty中较大值减去较小值
            if (tx > ty){//此时只能有tx减去ty
                tx -= ty;
            }
            else{//此时只能有ty减去tx
                ty -= tx;
            }
        }
        return false;
    }
};

超时了。。。 这时我们得考虑优化代码了,在进行将较大值减去较小值的时候,当tx,ty的差距非常大 这时就需要大量的耗时,那我们能不能将较大者一次性减去若干个较小值,从而快速 逼近sx,sy呢?详见下面的代码。

public boolean reachingPoints(int sx, int sy, int tx, int ty) {
        while (sx <= ty && sy <= ty) { //因为sx, sy, tx, ty 是范围在 [1, 10^9] 的整数,逆推不能出界
            if (sx == tx && sy == ty) {  //判断是否到达了起始值
                return true;
            }
            //每次逆推只能有tx、ty中较大值减去若干个较小值
            if (tx > ty) {
                //tx - sx是目标与起始值在x的差距,我们需要一次减去n * ty达到快速逼近sx的目的
                tx -= Math.max((tx - sx) / ty, 1) * ty;
            } else {
                //ty - sy是目标与起始值在y的差距,我们需要一次减去n * tx达到快速逼近sy的目的
                ty -= Math.max((ty - sy) / tx, 1) * tx;
            }
        }
        return false;
    }

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

相关文章

  • 780. 到达终点 - 每日一题

    780. 到达终点 - 力扣(LeetCode) (leetcode-cn.com)[https://leetco...

  • 780. 到达终点 (Reaching Points)

    title: ' 780. 到达终点 (Reaching Points)'date: 2019-01-17 17:...

  • 到达终点

    在这个阳光明媚的日子里,我们做着有意义的事情,参加迷你马拉松。陈诤豪和他好朋友以自己最快的速度到达了终点,今年比去...

  • 为了到达终点

    人类最伟大的力量 不是多少牛顿 而是精神的力量 当我相信 当我信仰 我可以独自 纵使匍匐 也不辜负 也不放弃 去那...

  • 似乎到达终点

    准备了大半年的考研在2017年12月24日的下午17:00结束了,踏着似乎看起来愉悦的脚步走出考场,看着身边的各位...

  • 到达终点以后

    XM二十多年来一直纠结一个问题,就是父母到底爱不爱自己。她认为父母爱DD多一些,所有的东西总是要先满足DD,然后才...

  • Day 4 Project 我的微信好友

    附:每日一题

  • 以快到达终点

    回想起来,我不知道这八个月怎么过来的,不,从我拿到签证的那一刻,我不知道我是以怎样的心情走到今天。出发前的一个月我...

  • 您已到达终点

    我终于无聊到可以静下心来,完成我十二天前本该完成的毕业任务。或许我不应该再回想过去的日子,不管是一年还是一...

  • 到达终点,追逐终止

    都说亦舒的小说,讲的是赤裸裸的人性,为此,去看了电影《喜宝》。 喜宝要什么?要爱,很多很多的爱。 喜宝要什么?要钱...

网友评论

    本文标题:780. 到达终点 - 每日一题

    本文链接:https://www.haomeiwen.com/subject/wpjpsrtx.html