Elimine la mayor cantidad de pares o piedras en la misma columna java (y verifique la colección)

Se colocan n piedras en algunos puntos de coordenadas enteras en un plano bidimensional. Puede haber como máximo una piedra en cada punto de coordenadas.

Si hay otras piedras en la misma fila o en la misma fila de una piedra, entonces la piedra se puede quitar.

Le da una matriz de piedras de longitud n, donde piedras [i] = [xi, yi] representa la posición de la i-ésima piedra, y devuelve el número máximo de piedras que se pueden quitar.

Ejemplo 1:

Entrada: piedras = [[0,0], [0,1], [1,0], [1,2], [2,1], [2,2]]
Salida: 5
Explicación: Una eliminación El método de 5 piedras es la siguiente:

  1. Quite la piedra [2,2] porque es lo mismo que [2,1].
  2. Quite la piedra [2,1] porque está en la misma columna que [0,1].
  3. Quite la piedra [1,2] porque va con [1,0].
  4. Quite la piedra [1,0] porque está en la misma columna que [0,0].
  5. Retire la piedra [0,1] porque es lo mismo que [0,0].
    La piedra [0,0] no se puede quitar porque no está en línea / columna con otra piedra.
    Ejemplo 2:

Entrada: piedras = [[0,0], [0,2], [1,1], [2,0], [2,2]]
Salida: 3
Explicación: Un método para quitar 3 piedras es el siguiente. :

  1. Quite la piedra [2,2] porque es lo mismo que [2,0].
  2. Quite la piedra [2,0] porque está en la misma columna que [0,0].
  3. Retire la piedra [0,2] porque es lo mismo que [0,0].
    Las piedras [0,0] y [1,1] no se pueden quitar porque no están en línea / columna con otra piedra.
    Ejemplo 3:

Entrada: piedras = [[0,0]]
Salida: 0
Explicación: [0,0] es la única piedra en el plano, por lo que no se puede quitar.

rápido:

1 <= piedras.longitud <= 1000
0 <= xi, yi <= 104
No habrá dos piedras colocadas en el mismo punto de coordenadas

Fuente: LeetCode (LeetCode)
Enlace: https://leetcode-cn.com/problems/most-stones-removed-with-same-row-or-column
Copyright es propiedad de LeetCode . Para reimpresiones comerciales, comuníquese con la autorización oficial. Para reimpresiones no comerciales, indique la fuente.

Idea: La búsqueda de sindicatos tiene dos conjuntos de plantillas, un conjunto de mapas y un conjunto de matrices (de hecho, todos son de la misma naturaleza).

public class Solution {
    
    

    public int removeStones(int[][] stones) {
    
    
        UnionFind unionFind = new UnionFind();

        for (int[] stone : stones) {
    
    
            // 下面这三种写法任选其一
            // unionFind.union(~stone[0], stone[1]);
            // unionFind.union(stone[0] - 10001, stone[1]);
            unionFind.union(stone[0] + 10001, stone[1]);
        }
        return stones.length - unionFind.getCount();
    }

    
}
class UnionFind{
    
    
    private Map<Integer,Integer> parent;
    private int count;
    public UnionFind(){
    
    
        this.parent = new HashMap<>();
        this.count = 0;
    }
    public int getCount(){
    
    
        return count;
    }
    public int find(int x){
    
    
        if(!parent.containsKey(x)){
    
    
            parent.put(x,x);
            count++;
        }
        if(x!=parent.get(x)){
    
    
            parent.put(x,find(parent.get(x)));
        }
        return parent.get(x);
    }
    public void union(int x,int y){
    
    
        int rootX = find(x);
        int rootY = find(y);
        if(rootX==rootY){
    
    
            return;
        }
        parent.put(rootX,rootY);
        count--;
    }
}       

Supongo que te gusta

Origin blog.csdn.net/weixin_43824233/article/details/112650621
Recomendado
Clasificación