Connexion redondante java (et jeu de contrôle)

Dans ce problème, l'arbre fait référence à un graphe non orienté connecté et acyclique.

Entrez un graphique composé d'un arbre avec N nœuds (les valeurs de nœud ne se répètent pas 1, 2,…, N) et une arête supplémentaire. Les deux sommets de l'arête supplémentaire sont compris entre 1 et N, et cette arête supplémentaire n'appartient pas à une arête existante dans l'arbre.

Le graphique résultant est un tableau d'arêtes à deux dimensions. Les éléments de chaque arête sont une paire de [u, v], satisfaisant u <v, représentant les arêtes du graphe non orienté reliant les sommets u et v.

Renvoie une arête qui peut être supprimée afin que le graphe résultant soit un arbre à N nœuds. S'il y a plusieurs réponses, le dernier bord du tableau à deux dimensions est renvoyé. Le côté réponse [u, v] doit satisfaire au même format u <v.

Exemple 1:

Entrée: [[1,2], [1,3], [2,3]]
Sortie: [2,3]
Explication: Le graphe non orienté donné est:
1
/
2-3
Exemple 2:

Entrée: [[1,2], [2,3], [3,4], [1,4], [1,5]]
Sortie: [1,4]
Explication: Le graphe non orienté donné est:
5- 1-2
| |
4-3
Remarque:

La taille du tableau bidimensionnel d'entrée est comprise entre 3 et 1 000.
Les entiers du tableau bidimensionnel sont compris entre 1 et N, où N est la taille du tableau d'entrée.
Mise à jour (2017-09-26):
Nous avons revérifié la description du problème et les cas de test, et il est clair que le graphique est un graphique non orienté. Pour les graphiques dirigés, voir Redundant Connection II pour plus de détails. Nous nous excusons pour tout désagrément qui aurait pu être causé.

Source: LeetCode (LeetCode)
Lien: https://leetcode-cn.com/problems/redundant-connection
Copyright est la propriété de LeetCode . Pour les réimpressions commerciales, veuillez contacter l'autorisation officielle. Pour les réimpressions non commerciales, veuillez indiquer la source.

Idée: Hahahahahaha, aujourd'hui, cet ensemble de modèles précédents a été créé. Ensemble de modèles pour le nombre de provinces (en fait, deux méthodes)

class Solution {
    
    
    public int[] findRedundantConnection(int[][] edges) {
    
    
        int len = edges.length;
        int[] parent = new int[len+1];
        for(int i=0;i<=len;i++)
        {
    
    
            parent[i] = i;
        }
        for(int i=0;i<len;i++)
        {
    
    
            int[] edge = edges[i];
            int node1 = edge[0];
            int node2 = edge[1];
            //如果没有共同的祖先,那就更新一下
            if(find(parent,node1)!=find(parent,node2)){
    
    
                union(parent,node1,node2);
            }else{
    
    //有共同的祖先,那就say goodbye
                return edge;
            }
        }
        return new int[0];
    }
    //这下面的是模板
    public void union(int[] parent,int index1,int index2){
    
    
        parent[find(parent,index1)] = find(parent,index2);
    }
    
    public int find(int[] parent,int index)
    {
    
    
        if(parent[index]!=index)
        {
    
    
            parent[index] = find(parent,parent[index]);
        }
        return parent[index];
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43824233/article/details/112556293
conseillé
Classement