leetcode 310. The minimum height of the tree

MS 57 , all  Java  defeated 70.67% submission of users

MB 48.7 , in all  Java  defeated 89.04% submission of users

 

Alternatively queue array, the timeout from beat to 70%, with the tree [0] a new alternative to the ArrayList new, increased by 10%

 

The idea is to traverse it again, delete a node of degree 1, the answer may be only 1 or 2

 

 1 public List<Integer> findMinHeightTrees(int n, int[][] edges) {
 2         ArrayList<Integer>[] tree = new ArrayList[n];
 3         for (int i = 0; i < n; i++) tree[i] = new ArrayList<>();
 4         for (int i = 0; i < edges.length; i++) {
 5             int a = edges[i][0], b = edges[i][1];
 6             tree[a].add(b);
 7             tree[b].add(a);
 8         }
 9         int[] valid = new int[n];
10         Arrays.fill(valid, 1);
11         int[] q = new int[n];
12         int len = n;
13         while (len > 2) {
14             q[0] = 0;
15             for (int i = 0; i < n; i++) if (tree[i].size() == 1) q[++q[0]] = i;
16             len -= q[0];
17             for (int j = 1; j <= q[0]; j++) {
18                 int a = q[j], b = tree[a].get(0);
19                 tree[a].clear();
20                 for (int i = 0; i < tree[b].size(); i++) {
21                     if (tree[b].get(i) == a) {
22                         tree[b].remove(i);
23                         break;
24                     }
25                 }
26                 valid[a] = 0;
27             }
28         }
29         tree[0].clear();
30         for (int i = 0; i < n; i++) if (valid[i] == 1) tree[0].add(i);
31         return tree[0];
32     }

 

Guess you like

Origin www.cnblogs.com/towerbird/p/11582637.html