【Diario de pinceles】 780. Alcanza el final

¡Acostúmbrate a escribir juntos! Este es el octavo día de mi participación en el "Nuggets Daily New Plan · April Update Challenge", haz clic para ver los detalles del evento .

【Diario de pinceles】 780. Alcanza el final

El artículo 28 de este diario de escritura se titula: 429. Travesía en orden de niveles del árbol N-ario , difícil

1. Descripción del tema:

El sábado, vayamos temprano a la pregunta diaria. Hoy es una pregunta difícil . El contenido de la pregunta es relativamente pequeño y claro. No debería ser difícil de hacer.

Así que echemos un vistazo más de cerca

2. ¿Qué idea examina esta pregunta? ¿Cuál es tu pensamiento?

Consulte este tema, la información clave es la siguiente:

  • El título da 2 coordenadas, podemos convertir la coordenada 1 en la coordenada 2 de acuerdo con la lógica dada en el título, si es así, entonces el resultado es verdadero, de lo contrario es falso
  • Entonces, el significado del título, ¿podemos también convertir a la coordenada 1 a la coordenada 2 de acuerdo con la lógica? También es factible.
  • Al convertir, debemos prestar atención a que (x,y) solo se puede convertir a (x+y,y) o (x,y+x) al iniciar la conversión, no a (x+x,y) o ( x,y+y), o (x+x,y+y)

Así que vamos a deducir cómo lograr este problema.

El ejemplo dado por el título es: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

Cuando el número es relativamente pequeño, podemos deducirlo mejor. Cuando el número es grande, ¿debemos sumar sy a sx o sumar sx a sy?

Solo podemos seguir sumando para cada situación, hasta que todos los caminos, hay 1 camino que se puede convertir en tx, ty, entonces se puede lograr

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

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

三、编码

De acuerdo con la lógica y el análisis anteriores, podemos traducirlo al siguiente código. Cabe señalar aquí que cuando tx = sx, o ty = sy, ya no podemos reducirlo. En este momento, necesitamos verificar lo anterior. mencionado lógico

La codificación es la siguiente:

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

Después de leer el código anterior, la lógica sigue siendo muy clara, xdm también puede razonar al respecto cuando tenga tiempo. El razonamiento inverso es mucho más claro que el razonamiento directo.

4. Resumen:

Entonces la complejidad vacía de este tiempo es O(1) , que no es difícil de ver, porque no hemos introducido un nuevo espacio, cuál es la complejidad del tiempo, podemos pensar en ello, nuestra complejidad del tiempo esta vez, depende de The arriba para bucle, pero ¿cuál es el número de bucles?

¿Es nuestra complejidad de tiempo O(n) , O(log tx) , O(log ty) u O(log max(tx + ty)) ?

Dirección del título original: 780. Llegar al punto final

Estoy aquí hoy, lo que he aprendido, si hay alguna desviación, corríjame

Bienvenido a me gusta, seguir, favorito

Amigos, su apoyo y aliento son la motivación para que yo persista en compartir y mejorar la calidad.

Bien, aquí está esta vez.

La tecnología es abierta, y nuestra mentalidad debe ser abierta. Acepta el cambio, vive bajo el sol y sigue adelante.

Soy el pequeño demonio Nezha , bienvenido a dar me gusta, seguir y coleccionar, hasta la próxima ~

Supongo que te gusta

Origin juejin.im/post/7084534430739464229
Recomendado
Clasificación