【Дневник кисти】780. Дойти до конца

Привыкайте писать вместе! Это 8-й день моего участия в «Новом ежедневном плане Nuggets · Апрельское задание по обновлению», нажмите, чтобы просмотреть подробности мероприятия .

【Дневник кисти】780. Дойти до конца

28-я статья этого дневника называется: 429. Обход по порядку уровней N-арного дерева , сложный

1. Описание темы:

В субботу давайте пораньше перейдем к ежедневному вопросу.Сегодня сложный вопрос.Содержание вопроса относительно небольшое и ясное.Это не должно быть сложно сделать.

Итак, давайте посмотрим поближе

2. Какую идею исследует этот вопрос? Что вы думаете?

Проверьте эту тему, ключевая информация выглядит следующим образом:

  • В заголовке указаны 2 координаты, мы можем преобразовать координату 1 в координату 2 по логике, заданной в заголовке, если да, то результат верен, иначе - ложь
  • Тогда смысл заголовка, можем ли мы тоже по логике преобразовать в координату 1 через координату 2. Это тоже достижимо.
  • При преобразовании нам нужно обратить внимание, что (x,y) может быть преобразовано только в (x+y,y) или (x,y+x) при запуске преобразования, а не (x+x,y) или ( х,у+у) или (х+х,у+у)

Итак, давайте выведем, как решить эту проблему.

Пример, указанный в заголовке:sx = 1, sy = 1, tx = 3, ty = 5

sx = sx = 1, sy = sx+sy = 2

sx = sx + sy = 3, sy = sy = 2

sx = sx = 3, sy = sy + sx = 5

Когда число относительно невелико, мы можем лучше вывести его, а когда число велико, должны ли мы прибавлять sy к sx или прибавлять sx к sy?

Мы можем только продолжать добавлять для каждой ситуации, пока все пути, не будет 1 пути, который можно преобразовать в tx, ty, тогда это может быть достигнуто.

那么,上述的这种方式,情况实在是太多,当数据量大的时候,就会出现超时的情况,是不符合题目给出的要求的,对于题目给给出的测试用例,是不能完全跑过的

那么,我们也可以将 tx, ty 转成 sx, sy 来看看效果

tx , ty 转成 sx 和 sy 的时候,按照上述逻辑就是 (tx-ty,ty) 或者 (tx,ty -tx)

那么此处就要注意,对于这里的减法,那么肯定是 大数减去小数,才能得到我们期望的正数

开始推演:

tx = 3 , ty = 5

tx = 3, ty = ty -tx = 2

tx = tx - ty = 1 , ty = 2

tx = 1, ty = ty - tx = 1

此时,咱们反推,也是 OK 的,但是我们发现,发推的话,逻辑就比较明确,也没有那么多弯弯绕绕,只需要比较 tx ,ty 谁大,大的减去对方就可以了

但是这里还需要注意的是,只要当我们 tx 或者 ty 减到其中 tx = sx 或者 ty = sy 的时候,那么就不能再减下去了

此时,我们就可以查看 当前的较大的一个数 减去 对应的sx 或者 sy,是对方的倍数,

例如,我们此时不能再往下减了,此时 tx 已经等于 sx,那么我们就可以校验 ty - sy 的结果是否是 tx 的整数倍即可,因为这个时候,只能是 ty 不断的减去 tx 来看是否有机会等于 sy

那这个时候,我们又发现,这其实是一个数学题,我们理清楚思路之后,就可以来编码了,思路如下:

  • 咱们使用反向推导,让 tx, ty 减去对方,来查看是否可以转换成 sx, sy

三、编码

В соответствии с приведенной выше логикой и анализом, мы можем перевести его в следующий код. Здесь следует отметить, что когда tx = sx, или ty = sy, мы больше не можем его уменьшить. В это время нам нужно проверить вышеприведенное упомянутый логический

Кодировка следующая:

func reachingPoints(sx, sy, tx, ty int) bool {
    // 辗转相除,直到 tx <= sx  或者 ty <= sy
    for tx > sx && ty > sy  {
        if tx > ty {
            tx %= ty
        } else {
            ty %= tx
        }
    }
    // 退出上述条件之后,开始校验 tx,ty 中较大的一个数字是否是否可以被另外一个数字整除
    switch {
    case tx == sx && ty == sy:
        return true
    case tx == sx:
        return ty > sy && (ty-sy)%tx == 0
    case ty == sy:
        return tx > sx && (tx-sx)%ty == 0
    default:
        return false
    }
}
复制代码

После прочтения приведенного выше кода логика все еще очень ясна, xdm также может рассуждать об этом, когда у вас есть время.Обратное рассуждение действительно намного яснее, чем прямое рассуждение.

4. Резюме:

Тогда пустая сложность этого времени O(1) , что нетрудно увидеть, потому что мы не ввели новое пространство, какова временная сложность, мы можем об этом подумать, наша временная сложность на этот раз зависит от выше для цикла, но каково количество циклов?

Является ли наша временная сложность O(n), O(log tx), O(log ty) или O(log max(tx + ty))?

Оригинальный титульный адрес: 780. Прибытие в конечную точку.

Я здесь сегодня, что я узнал, если есть какие-либо отклонения, пожалуйста, поправьте меня

Добро пожаловать лайк, подписка, избранное

Друзья, ваша поддержка и поощрение мотивируют меня продолжать делиться и улучшать качество.

Хорошо, вот и на этот раз

Технологии открыты, и наш менталитет должен быть открытым. Примите перемены, живите на солнце и двигайтесь вперед.

Я маленький мальчик-дьявол Нэчжа , добро пожаловать, лайкайте, подписывайтесь и собирайте, увидимся в следующий раз~

рекомендация

отjuejin.im/post/7084534430739464229