El tiempo mínimo para visitar todos los puntos | Estadísticas de los servidores que participan en la comunicación | Sistema de recomendación de búsqueda | Número de soluciones detenidas en el lugar | Juego semanal LeetCode 164 Implementación JAVA "164"

1266. Tiempo mínimo para visitar todos los puntos.

Hay plano npunto, la posición del punto representado por coordenadas enteras points[i] = [xi, yi]. Calcule el tiempo mínimo (en segundos) requerido para acceder a todos estos puntos.

Puedes moverte en el avión de acuerdo con las siguientes reglas:

  • Cada segundo se mueve una unidad de longitud en dirección horizontal o vertical, o cruza la diagonal (se puede ver como mover una unidad de longitud en dirección horizontal y vertical en un segundo)
  • Se debe acceder a estos puntos en el orden en que aparecen en la matriz.

Ejemplo 1

Entrada : puntos = [[1,1], [3,4], [-1,0]]
Salida : 7
Explicación : Una ruta de acceso óptima es: [1,1] -> [2,2] - > [3,3] -> [3,4] -> [2,3] -> [1,2] -> [0,1] -> [-1,0]
de [1,1] a [ 3,4] toma 3 segundos
De [3,4] a [-1,0] toma 4 segundos Un
total de 7 segundos

Ejemplo 2

Entrada : puntos = [[3,2], [-2,2]]
Salida : 5

Pronto

  • points.length == n
  • 1 <= n <= 100
  • points[i].length == 2
  • -1000 <= points[i][0], points[i][1] <= 1000

Ideas para resolver problemas

[1,1] -> [2,2] Mueve dos pasos en 1 segundo

El tiempo requerido para moverse entre las coordenadas: el valor máximo de la diferencia entre las dos coordenadas x e y
Esta solución Java es 100%, 100%♪(^∇^*)

Implementación de la solución JAVA

Haga clic para ver el código fuente de la resolución de problemas de esta semana

public int minTimeToVisitAllPoints(int[][] points) {
    int result = 0;
    for (int i = 1; i < points.length; i++) {
        int x = Math.abs(points[i][0] - points[i - 1][0]);
        int y = Math.abs(points[i][1] - points[i - 1][1]);
        result += Math.max(x, y);
    }
    return result;
}

1267. Estadísticas de servidores que participan en la comunicación.

Hay un servidor de distribución, el servidor identifica la ubicación m * nde la rejilla de matriz de número entero grid, hay un servidor en una célula representa 1, 0 no indica.

Si los dos servidores están en la misma fila o columna, creemos que pueden comunicarse.

Cuente y devuelva el número de servidores que pueden comunicarse con al menos otro servidor.

Ejemplo 1

Entrada : grid = [[1,0], [0,1]]
Salida : 0
Explicación : Ningún servidor puede comunicarse con otros servidores.

Ejemplo 2

Entrada : grid = [[1,0], [1,1]]
Salida : 3
Explicación : Todos estos servidores pueden comunicarse con al menos otro servidor.

Ejemplo 3

Entrada : cuadrícula = [[1,1,0,0], [0,0,1,0], [0,0,1,0], [0,0,0,1]]
Salida : 4
Explicación : Los dos servidores en la primera fila se comunican entre sí, y los dos servidores en la tercera columna se comunican entre sí, pero el servidor en la esquina inferior derecha no puede comunicarse con otros servidores.

Pronto

  • m == grid.length
  • n == grid[i].length
  • 1 <= m <= 250
  • 1 <= n <= 250
  • grid[i][j] == 0 or 1

Ideas para resolver problemas

Calcule el número de máquinas en cada fila y columna y todas las coordenadas de
la máquina. Haga circular las coordenadas de la máquina para determinar si la fila y la columna son solo una.

Implementación de la solución JAVA

Haga clic para ver el código fuente de la resolución de problemas de esta semana

public int countServers(int[][] grid) {
    Map<Integer, Integer> mapx = new HashMap<>();
    Map<Integer, Integer> mapy = new HashMap<>();
    List<Integer[]> list = new ArrayList<>();
    for (int i = 0; i < grid.length; i++) {
        for (int j = 0; j < grid[0].length; j++) {
            if (grid[i][j] == 1) {
                mapx.put(i, mapx.getOrDefault(i, 0) + 1);
                mapy.put(j, mapy.getOrDefault(j, 0) + 1);
                list.add(new Integer[]{i, j});
            }
        }
    }
    int result = 0;
    for (Integer[] integers : list) {
        if (mapx.get(integers[0]) > 1 || mapy.get(integers[1]) > 1) {
            result++;
        }
    }
    return result;
}

1268. Sistema de recomendación de búsqueda

Se le proporciona una matriz de productos y una cadena de búsqueda. Cada producto en la matriz de productos es una cadena.

Diseñe un sistema de recomendación. Después de ingresar cada letra de la palabra searchWord a su vez, recomiende hasta tres productos con el mismo prefijo que searchWord en la matriz de productos. Si hay más de tres productos recomendados con el mismo prefijo, devuelva los tres más pequeños en orden lexicográfico.

Devuelva la lista de productos recomendados después de ingresar cada letra de searchWord en forma de una lista bidimensional.

Ejemplo 1

Entrada : productos = ["móvil", "mouse", "moneypot", "monitor", "mousepad"], searchWord = "mouse"
Salida : [
["" mobile "," moneypot "," monitor "],
[" móvil "," moneypot "," monitor "],
[" mouse "," mousepad "],
[" mouse "," mousepad "],
[" mouse "," mousepad "]
]
Explicación : después del orden lexicográfico La lista de productos es ["móvil", "moneypot", "monitor", "mouse", "mousepad"]
Ingrese my mo, porque todos los productos tienen el mismo prefijo, el sistema devuelve los tres productos con el orden lexicográfico más pequeño ["mobile "," Moneypot "," monitor "] Después de
ingresar mou, mous y mouse, el sistema devolverá [" mouse "," mousepad "]

Ejemplo 2

输入: productos = ["la habana"], searchWord = "la habana"
输出: [["la habana"], ["la habana"], ["la habana"], ["la habana"], ["la habana"], [" la Habana"]]

Ejemplo 3

输入: productos = [“bolsas”, “equipaje”, “pancarta”, “caja”, “telas”], searchWord = “bolsas”
输出: [[“equipaje”, “bolsas”, “pancarta”], [“ equipaje "," bolsas "," pancarta "], [" equipaje "," bolsas "], [" bolsas "]]

Ejemplo 4

Entrada : productos = [“havana”], searchWord = “tatiana”
Salida : [[], [], [], [], [], [], []]

Pronto

  • 1 <= products.length <= 1000
  • 1 <= Σ products[i].length <= 2 * 10^4
  • products[i] Todos los caracteres son minúsculas en inglés.
  • 1 <= searchWord.length <= 1000
  • searchWord Todos los caracteres son minúsculas en inglés.

Ideas para resolver problemas

  1. Ahora ordene los datos, encuentre la palabra con la misma letra inicial que la palabra de búsqueda e ingrese y salga de la lista
  2. Bucle para encontrar la primera 0.1.2 ... searchWord.length-1 carta de la Lista y encontrar la misma palabra
  3. Enumere más de 3 palabras, devuelva las tres primeras, no más de 3 palabras, devuelva Lista

Implementación de la solución JAVA

Haga clic para ver el código fuente de la resolución de problemas de esta semana

public List<List<String>> suggestedProducts(String[] products, String searchWord) {
    List<List<String>> result = new ArrayList<>(searchWord.length());
    List<String> list = new ArrayList<>(products.length);
    Arrays.sort(products);

    char first = searchWord.toCharArray()[0];
    for (String product : products) {
        if (product.toCharArray()[0] == first) {
            list.add(product);
        }
    }
    for (int i = 0; i < searchWord.length(); i++) {
        List<String> l = new ArrayList<>();
        list = search(list, searchWord, i);

        int size = list.size();
        for (int j = 0; j < Math.min(size, 3); j++) {
            l.add(list.get(j));
        }
        result.add(l);
    }
    return result;
}

public List<String> search(List<String> products, String searchWord, int x) {
    List<String> list = new ArrayList<>();
    for (String product : products) {
        if (product.toCharArray().length > x && product.toCharArray()[x] == searchWord
                .toCharArray()[x]) {
            list.add(product);
        }
    }
    return list;
}

1269. Número de opciones detenidas en el lugar

Una longitud arrLende la matriz, un índice de puntero comenzó 0a.

En cada paso, se puede mover el puntero hacia la izquierda o hacia la derecha 1paso, o una parada en su lugar (el puntero no se puede mover fuera del rango de la matriz).

darle dos enteros stepsy arrLen, a calcular y volver: en tan sólo ejecuta stepsdespués de las operaciones, el cursor quieto puntos para el índice de 0número en el programa.

Dado que la respuesta puede ser muy grande, por favor devuelva el número de programa del modo de 10^9 + 7 resultados después.

Ejemplo 1

Entrada : pasos = 3, arrLen = 2
Salida : 4
Explicación : Después de 3 pasos, se puede detener un total de 4 métodos diferentes en el índice 0.
Derecha, izquierda, inmóvil
inmóvil, derecha, izquierda impresa
derecha, inmóvil, inmovilizada izquierda
, inmóvil, inmóvil

Ejemplo 2

Entrada : pasos = 2, arrLen = 4
Salida : 2
Explicación : Después de 2 pasos, hay un total de 2 métodos diferentes que se pueden detener en el índice 0. Mueve a la
derecha, mueve a la izquierda

Ejemplo 3

Entrada : pasos = 4, arrLen = 2
Salida : 8

Pronto

  • 1 <= steps <= 500
  • 1 <= arrLen <= 10^6

Ideas para resolver problemas

Si el primer paso X para alojarse en Y en el

La primera X-1 Paso debe permanecer en la Y-1 o Y o Y + 1 en una

Y así sucesivamente (es necesario juzgar si Y-1 e Y + 1 cruzan el límite)

Implementación de la solución JAVA

Haga clic para ver el código fuente de la resolución de problemas de esta semana

public int numWays(int steps, int arrLen) {
    Long mod = 1000000007L;

    long[][] result = new long[steps + 1][steps + 1];

    int min = Math.min(arrLen, steps);

    result[0][0] = 1L;
    for (int i = 1; i <= steps; i++) {
        for (int j = 0; j < min; j++) {
            // 1. 第i-1步到位置j,i步停留原地j
            result[i][j] = result[i - 1][j];
            if (j != 0) {
                // 3. 第i-1步到位置j-1,i步右移到j
                result[i][j] += result[i - 1][j - 1];
            }
            if (j != min - 1) {
                // 2. 第i-1步到位置j+1,i步左移到j
                result[i][j] += result[i - 1][j + 1];
            }

            result[i][j] %= mod;
        }
    }
    return (int) result[steps][0];
}
Publicado 7 artículos originales · ganó 3 · vistas 312

Supongo que te gusta

Origin blog.csdn.net/sl285720967/article/details/103271527
Recomendado
Clasificación