【Pinseltagebuch】 780. Erreichen Sie das Ende

Machen Sie es sich zur Gewohnheit, gemeinsam zu schreiben! Dies ist der 8. Tag meiner Teilnahme an der „Nuggets Daily New Plan · April Update Challenge“, klicken Sie hier, um die Details der Veranstaltung anzuzeigen .

【Pinseltagebuch】 780. Erreichen Sie das Ende

Der 28. Artikel dieses Schreibtagebuchs trägt den Titel: 429. Level Order Traversal of N-ary tree , schwierig

1. Themenbeschreibung:

Kommen wir am Samstag früh zur täglichen Frage. Heute ist eine schwierige Frage . Der Inhalt der Frage ist relativ klein und klar. Es sollte nicht schwierig sein, dies zu tun.

Schauen wir also genauer hin

2. Welche Idee untersucht diese Frage? Was denkst du?

Schauen Sie sich dieses Thema an, die wichtigsten Informationen lauten wie folgt:

  • Der Titel gibt 2 Koordinaten an, wir können Koordinate 1 gemäß der im Titel angegebenen Logik in Koordinate 2 umwandeln, wenn ja, dann ist das Ergebnis wahr, andernfalls ist es falsch
  • Dann können wir die Bedeutung des Titels gemäß der Logik auch in Koordinate 1 bis Koordinate 2 umwandeln. Es ist auch erreichbar.
  • Bei der Konvertierung müssen wir darauf achten, dass (x,y) nur in (x+y,y) oder (x,y+x) konvertiert werden kann, wenn die Konvertierung gestartet wird, nicht (x+x,y), oder ( x,y+y) oder (x+x,y+y)

Lassen Sie uns also ableiten, wie Sie dieses Problem lösen können.

Das Beispiel aus dem Titel lautet: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

Wenn die Zahl relativ klein ist, können wir sie besser ableiten. Wenn die Zahl groß ist, sollten wir sy zu sx oder sx zu sy hinzufügen?

Wir können nur für jede Situation weiter addieren, bis alle Pfade einen Pfad haben, der in tx, ty umgewandelt werden kann, dann kann es erreicht werden

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

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

三、编码

Gemäß der obigen Logik und Analyse können wir es in den folgenden Code übersetzen. Es sollte hier beachtet werden, dass wir es nicht mehr reduzieren können, wenn tx = sx oder ty = sy. Zu diesem Zeitpunkt müssen wir das Obige überprüfen erwähnt logisch

Die Codierung ist wie folgt:

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

Nach dem Lesen des obigen Codes ist die Logik immer noch sehr klar, xdm kann auch darüber nachdenken, wenn Sie Zeit haben.Die umgekehrte Argumentation ist in der Tat viel klarer als die vorwärts gerichtete Argumentation.

4. Zusammenfassung:

Dann ist die leere Komplexität dieser Zeit O(1) , was nicht schwer zu sehen ist, weil wir keinen neuen Raum eingeführt haben, was die Zeitkomplexität ist, wir können darüber nachdenken, unsere Zeitkomplexität hängt diesmal von The ab oben for-Schleife, aber was ist die Anzahl der Schleifen?

Ist unsere Zeitkomplexität O(n) , O(log tx) , O(log ty) oder O(log max(tx + ty)) ?

Originaltiteladresse: 780. Ankunft am Endpunkt

Ich bin heute hier, was ich gelernt habe, wenn es irgendwelche Abweichungen gibt, korrigiere mich bitte

Willkommen bei Like, Follow, Favorit

Freunde, Ihre Unterstützung und Ermutigung sind die Motivation für mich, weiter zu teilen und die Qualität zu verbessern

Okay, hier ist es diesmal

Technologie ist offen, und unsere Mentalität sollte offen sein. Begrüßen Sie den Wandel, leben Sie in der Sonne und bewegen Sie sich vorwärts.

Ich bin der kleine Teufelsjunge Nezha , willkommen zum Liken, Folgen und Sammeln, bis zum nächsten Mal~

Ich denke du magst

Origin juejin.im/post/7084534430739464229
Empfohlen
Rangfolge