LeetCode 684 중복 연결

1961 단어 알고리즘
제목.
이 문제 에서 나 무 는 연결 되 고 고리 가 없 는 무방 향 도 를 가리킨다.
그림 을 입력 하 십시오. 이 그림 은 N 개의 노드 (노드 값 은 1, 2,..., N) 가 있 는 트 리 와 추가 적 인 변 으로 구성 되 어 있 습 니 다.추 가 된 변 의 두 정점 은 1 에서 N 사이 에 포함 되 어 있 으 며, 이 추 가 된 변 은 나무 에 존재 하 는 변 에 속 하지 않 습 니 다.
결과 도 는 로 구 성 된 2 차원 배열 이다.각 의 원 소 는 한 쌍 [u, v] 이다. ,만족시켰어  u < v, 연결 정점 표시 u v 의 무방 향도 변.
삭제 할 수 있 는 가장 자 리 를 되 돌려 결과 그림 은 N 개의 노드 가 있 는 나무 입 니 다.여러 개의 답 이 있 으 면 2 차원 배열 에서 마지막 으로 나타 난 변 으로 돌아간다.답안 변  [u, v] 같은 격식 을 만족 시 켜 야 한다.  u < v
예시 1:
  : [[1,2], [1,3], [2,3]]
  : [2,3]
  :        :
  1
 / \
2 - 3

예시 2:
  : [[1,2], [2,3], [3,4], [1,4], [1,5]]
  : [1,4]
  :        :
5 - 1 - 2
    |   |
    4 - 3

주의:
  • 입력 한 2 차원 배열 의 크기 는 3 에서 1000 이다.
  • 2 차원 배열 의 정 수 는 1 에서 N 사이 이 고 그 중에서 N 은 입력 배열 의 크기 이다.

  • 업데이트 (2017 - 09 - 26): 우 리 는 문제 설명 과 테스트 사례 를 재 검 사 했 습 니 다. 명확 한 그림 은 방향 이 없습니다. 그림.그림 에 대한 자세 한 내용 은 중복 연결 II 참조.어떠한 불편 을 초래 한 것 에 대해 우 리 는 깊 은 사과 의 뜻 을 느낀다.
    분석 하 다.
    그리고 집합 을 찾 습 니 다. new 한 배열 은 각 노드 의 뿌리 노드 (여기 (1, 2) 는 2 가 1 의 뿌리 노드 라 고 합 니 다) 를 저장 하고 edges 배열 을 옮 겨 다 닐 때 두 배열 의 뿌리 노드 가 같 는 지 찾 습 니 다. 같 으 면 고리 가 있 음 을 증명 하고 현재 배열 로 돌아 갑 니 다.
    코드
    class Solution {
        public int[] findRedundantConnection(int[][] edges) {
            int[] nums = new int[2000];
    
            for(int[] i : edges){
                int root1 = find(i[0],nums);
                int root2 = find(i[1],nums);
                if (root1 == root2)
                    return i;
                else {
                    nums[root1] = root2;
                }
            }
            return null;
    
        }
    
        public static int find(int x, int[] nums){
            while (nums[x] != 0){
                x = nums[x];
            }
            return x;
        }
    }

    좋은 웹페이지 즐겨찾기