LeetCode Minimum Height Trees
2016-03-21 12:18
260 查看
原题链接在这里:https://leetcode.com/problems/minimum-height-trees/
题目:
For a undirected graph with tree characteristics, we can choose any node as the root. The result graph is then a rooted tree. Among all possible rooted trees, those with minimum height are called minimum height trees (MHTs). Given such a graph, write a function to find all the MHTs and return a list of their root labels.
Format
The graph contains
You can assume that no duplicate edges will appear in
Example 1:
Given
return
Example 2:
Given
return
题解:
与Course Schedule, Course Schedule II类似。
用BFS based topological sort. 从叶子节点开始放入queue中,最后剩下的一个或者两个就是最中心的点.
这里练习undirected graph的topological sort. 用Map<Integer, Set<Integer>>来表示graph, 一条edge, 两头node都需要加graph中.
Time Complexity: O(n+e). Space: O(n+e).
AC Java:
题目:
For a undirected graph with tree characteristics, we can choose any node as the root. The result graph is then a rooted tree. Among all possible rooted trees, those with minimum height are called minimum height trees (MHTs). Given such a graph, write a function to find all the MHTs and return a list of their root labels.
Format
The graph contains
nnodes which are labeled from
0to
n - 1. You will be given the number
nand a list of undirected
edges(each edge is a pair of labels).
You can assume that no duplicate edges will appear in
edges. Since all edges are undirected,
[0, 1]is the same as
[1, 0]and thus will not appear together in
edges.
Example 1:
Given
n = 4,
edges = [[1, 0], [1, 2], [1, 3]]
0 | 1 / \ 2 3
return
[1]
Example 2:
Given
n = 6,
edges = [[0, 3], [1, 3], [2, 3], [4, 3], [5, 4]]
0 1 2 \ | / 3 | 4 | 5
return
[3, 4]
题解:
与Course Schedule, Course Schedule II类似。
用BFS based topological sort. 从叶子节点开始放入queue中,最后剩下的一个或者两个就是最中心的点.
这里练习undirected graph的topological sort. 用Map<Integer, Set<Integer>>来表示graph, 一条edge, 两头node都需要加graph中.
Time Complexity: O(n+e). Space: O(n+e).
AC Java:
public class Solution { public List<Integer> findMinHeightTrees(int n, int[][] edges) { List<Integer> res = new ArrayList<Integer>(); if(n <= 1 || edges == null || edges.length == 0 || edges[0].length == 0){ res.add(0); return res; } Map<Integer, Set<Integer>> graph = new HashMap<Integer, Set<Integer>>(); for(int i = 0; i<n; i++){ graph.put(i, new HashSet<Integer>()); } for(int [] edge : edges){ graph.get(edge[0]).add(edge[1]); graph.get(edge[1]).add(edge[0]); } LinkedList<Integer> que = new LinkedList<Integer>(); for(int i = 0; i<n; i++){ if(graph.get(i).size() == 1){ que.add(i); } } while(n > 2){ n -= que.size(); LinkedList<Integer> newQue = new LinkedList<Integer>(); for(int cur : que){ for(int neighbour : graph.get(cur)){ graph.get(cur).remove(neighbour); graph.get(neighbour).remove(cur); if(graph.get(neighbour).size() == 1){ newQue.add(neighbour); } } } que = newQue; } res.addAll(que); return res; } }
相关文章推荐
- 安卓属性动画(Property Animation)(上)
- appium在真机上运行IOS实例要注意的几点:包括python和java运行log 和部分关键代码
- 阻塞式线程安全列表
- 如何在关闭SSH Session的情况下,程序还能继续运行
- java static关键字用法详解
- JavaScript系列:正则表达式
- 关于对张伟祥同学的代码复审!
- PHP进阶篇:取得日期的Unix时间戳
- CENTOS 内存释放
- OpenCV HOG Detector: Result Clustering
- 阅读程序 回答问题——FindTheNumber
- ajax与HTML5 history pushState/replaceState实例
- PullToRefreshViewPager和ViewPager制作卡片效果
- myeclipse 2015 stable 2.0连接mysql URL错误
- iOS AssetsLibrary和Photos的使用总结: 原图获取(2)
- LeetCode "Counting Bits"
- 栈在java中的实现
- mysql锁-乐观锁
- Docker历险记(一)
- js 跨域访问