[Contexto] Concurso de programación de la LC LC 2020 National Spring Season

C_01 tomar monedas

Hay n pilas de monedas en la mesa, y el número de cada pila se almacena en las monedas de la matriz. Podemos elegir cualquier pila a la vez, tomar una o dos de ellas y pedir la cantidad mínima de veces para obtener todas las monedas.

输入:[4,2,1]
输出:4
解释:第一堆力扣币最少需要拿 2 次,第二堆最少需要拿 1 次,第三堆最少需要拿 1 次,总共 4 次即可拿完。

示例 2:
输入:[2,3,10]
输出:8

限制 :
1 <= n <= 4
1 <= monedas [i] <= 10

Método 1: simulación

public int minCount(int[] coins) {
    int sum = 0;
    for (int coin : coins) {
        if (coin % 2 == 0) {
            sum += coin/2;
        } else {
            sum += coin/2 + coin%2;
        }
    }
    return sum;
}

Análisis de complejidad.

  • Complejidad del tiempo: El ( norte ) O (n)
  • Complejidad espacial: El ( 1 ) O (1)

B_02 Información de transferencia

El niño A está jugando un juego informativo con sus amigos. Las reglas del juego son las siguientes:

  • Hay n jugadores, todos los números de jugadores son 0 ~ n-1, y el número del niño A es 0
  • Cada jugador tiene un número fijo de otros jugadores que pueden transmitir información (o no). La relación de transmisión de información es unidireccional (por ejemplo, A puede transmitir información a B, pero B no puede transmitir información a A).
  • Cada ronda de información debe pasarse a otra persona, y la información puede pasar a través de la misma persona repetidamente

Dado el número total de jugadores n, y una relación de matriz bidimensional que consiste en [número de jugador, correspondiente al número de jugador que se puede pasar]. El número de soluciones devueltas desde el pequeño A (número 0) al socio con el número n-1 a través de k rondas; si no se puede alcanzar, devuelve 0.

输入:n = 5, relation = [[0,2],[2,1],[3,4],[2,3],[1,4],[2,0],[0,4]], k = 3
输出:3
解释:信息从小 A 编号 0 处开始,经 3 轮传递,到达编号 4。共有 3 种方案,
分别是 0->2->0->4, 0->2->1->4, 0->2->3->4。

Método 1: dfs

Construcción, dfs ...

List<List<Integer>> g;
int tot, N, K;
public int numWays(int n, int[][] edges, int k) {
    N = n;
    K = k;
    g = new ArrayList<>();
    for (int i = 0; i < n; i++) {
        g.add(new ArrayList<>());
    }
    for (int[] e : edges) {
        g.get(e[0]).add(e[1]);
    }
    dfs(k, 0);
    return tot;
}
void dfs(int id, int k) {
    if (k == 0) {
        if (id == N-1)
            tot++;
        return;
    }
    for (int nei : g.get(id)) {
        dfs(nei, k-1);
    }
}

Análisis de complejidad.

  • Complejidad del tiempo: El ( norte ) O (n)
  • Complejidad espacial: El ( norte ) O (n)

Método 2: bfs

Anillo positivo: Habrá un anillo en esta pregunta, que seguirá caminando dentro del anillo, lo que resultará en un tiempo de espera, por lo que cuando k <0, descartamos esos puntos.

List<List<Integer>> g;
int tot, N;
public int numWays(int n, int[][] edges, int k) {
    N = n;
    g = new ArrayList<>();
    for (int i = 0; i < n; i++) {
        g.add(new ArrayList<>());
    }
    for (int[] e : edges) {
        g.get(e[0]).add(e[1]);
    }
    bfs(k);
    return tot;
}
private void bfs(int k) {
    Queue<Integer> q = new LinkedList<>();
    q.add(0);
    while (!q.isEmpty()) {
        int s = q.size();
        while (s-- > 0) {
            int id = q.poll();
            if (k == 0 && id == N-1)
                tot++;
            if (k < 0)
                continue;
            for (int nei : g.get(id)) {
                q.add(nei);
            }
        }
        k--;
    }
}

Análisis de complejidad.

  • Complejidad del tiempo: El ( norte ) O (n)
  • Complejidad espacial: El ( norte ) O (n)

B_03

Método uno:


Análisis de complejidad.

  • Complejidad del tiempo: El ( ) O ()
  • Complejidad espacial: El ( ) O ()

A_04

Método uno:


Análisis de complejidad.

  • Complejidad del tiempo: El ( ) O ()
  • Complejidad espacial: El ( ) O ()

Publicado 714 artículos originales · elogiado 199 · 50,000+ vistas

Supongo que te gusta

Origin blog.csdn.net/qq_43539599/article/details/105601396
Recomendado
Clasificación