【Journal des pinceaux】780. Atteindre la fin

Prenez l'habitude d'écrire ensemble ! C'est le 8ème jour de ma participation au "Nuggets Daily New Plan · April Update Challenge", cliquez pour voir les détails de l'événement .

【Journal des pinceaux】780. Atteindre la fin

Le 28e article de ce journal d'écriture est intitulé : 429. Parcours d'ordre de niveau de l'arbre N-aire , difficile

1. Descriptif du sujet :

Samedi, arrivons tôt à la question quotidienne. Aujourd'hui, c'est une question difficile . Le contenu de la question est relativement petit et clair. Cela ne devrait pas être difficile à faire.

Alors regardons de plus près

2. Quelle idée cette question examine-t-elle ? Quelle est votre pensée?

Consultez ce sujet, les informations clés sont les suivantes :

  • Le titre donne 2 coordonnées, on peut convertir la coordonnée 1 en coordonnée 2 selon la logique donnée dans le titre, si oui, alors le résultat est vrai, sinon il est faux
  • Ensuite, la signification du titre, peut-on également convertir selon la logique de la coordonnée 1 à la coordonnée 2. C'est également réalisable.
  • Lors de la conversion, nous devons faire attention au fait que (x,y) ne peut être converti qu'en (x+y,y) ou (x,y+x) au démarrage de la conversion, et non en (x+x,y), ou ( x,y+y), ou (x+x,y+y)

Voyons donc comment résoudre ce problème.

L'exemple donné par le titre est :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

Quand le nombre est relativement petit, on peut mieux le déduire, quand le nombre est grand, faut-il ajouter sy à sx ou ajouter sx à sy ?

Nous ne pouvons que continuer à ajouter pour chaque situation, jusqu'à ce que tous les chemins, il y ait 1 chemin qui peut être converti en tx, ty, alors il peut être atteint

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

那么,我们也可以将 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

三、编码

Selon la logique et l'analyse ci-dessus, nous pouvons le traduire dans le code suivant. Il convient de noter ici que lorsque tx = sx, ou ty = sy, nous ne pouvons plus le réduire. À ce stade, nous devons vérifier ce qui précède mentionné logique

L'encodage est le suivant :

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
    }
}
复制代码

Après lecture du code ci-dessus, la logique est toujours très claire, xdm peut aussi raisonner quand on a le temps, le raisonnement inverse est en effet beaucoup plus clair que le raisonnement direct.

4. Résumé :

Alors la complexité vide de ce temps est O(1) , ce qui n'est pas difficile à voir, car on n'a pas introduit de nouvel espace, quelle est la complexité en temps, on peut y penser, notre complexité en temps cette fois, dépend de ci-dessus pour la boucle, mais quel est le nombre de boucles ?

Notre complexité temporelle est-elle O(n) , O(log tx) , O(log ty) ou O(log max(tx + ty)) ?

Adresse du titre d'origine : 780. Arrivée au point final

Je suis ici aujourd'hui, ce que j'ai appris, s'il y a des écarts, corrigez-moi s'il vous plaît

Bienvenue à aimer, suivre, favori

Amis, votre soutien et vos encouragements sont la motivation pour moi de persister dans le partage et d'améliorer la qualité

Bon, la voici cette fois

La technologie est ouverte, et notre mentalité devrait être ouverte. Acceptez le changement, vivez au soleil et avancez.

Je suis le petit diable garçon Nezha , bienvenue pour aimer, suivre et collectionner, à la prochaine fois ~

Je suppose que tu aimes

Origine juejin.im/post/7084534430739464229
conseillé
Classement