2021-03-10: Hay N puntos en una matriz, el punto con el número de secuencia 0 es el punto de inicio y el punto con el número de secuencia N-1 es el punto final

2021-03-10: Hay N puntos en una matriz, el punto con el número de secuencia 0 es la posición inicial y el punto con el número de secuencia N-1 es la posición final. Ahora tenemos que caminar desde el punto 0 al punto N-1 en secuencia. Pero además del punto 0 y el punto N-1, puede seleccionar un punto entre las posiciones N-2 restantes, ignorar este punto directamente y preguntar qué tan lejos al menos del punto de inicio al punto final.

La respuesta de Fu Ge 2021-03-10:

Array [1,4, -1,3], ignorando el número de secuencia 1, el arreglo se convierte en [1, -1,3], la distancia es abs (-2) + 4 = 6; ignorando el número de secuencia 2, el matriz se convierte en [1, 4,3], la distancia es 3 + 1 = 4.
Seleccione un punto de las coordenadas N-2 e ignore este punto directamente. Ignorar un punto directamente solo afectará directamente la distancia entre los nodos antes y después del nodo. A esta distancia afectada temporalmente la denominamos distancia optimizada, todos los nodos se forman en un conjunto de tres nodos en orden, de esta forma el resultado se puede obtener pasando solo por un bucle.
Inserte la descripción de la imagen aquí
El código está escrito en golang, el código es el siguiente:

package main

import "fmt"

func main() {
    arr := []int{1, 4, -1, 3}
    fmt.Println(shortDistance(arr))
}
func shortDistance(arr []int) int {
    arrLen := len(arr)
    if arrLen <= 1 {
        return 0
    }
    if arrLen <= 3 {
        return abs(arr[arrLen-1] - arr[0])
    }
    i1 := arr[1] - arr[0]
    i2 := 0
    maxval := 0    //最大优化距离
    ret := abs(i1) //所有相邻两边距离之和

    for i := 1; i < arrLen-1; i++ {
        i2 = arr[i+1] - arr[i]

        maxval = getMax(maxval, abs(i2)+abs(i1)-abs(i2+i1))

        i1 = i2
        ret += abs(i1)
    }

    return ret - maxval
}
func abs(a int) int {
    if a < 0 {
        return -a
    } else {
        return a
    }
}
func getMax(a int, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

Los resultados de la ejecución son los siguientes:
Inserte la descripción de la imagen aquí


comentario

Supongo que te gusta

Origin blog.51cto.com/14891145/2655133
Recomendado
Clasificación