【LC总结】Union Find系列(Num of Islands I&II/Graph Valid Tree/etc) - Road to Glory - SegmentFault 思否



【LC总结】Union Find系列(Num of Islands I&II/Graph Valid Tree/etc) - Road to Glory - SegmentFault 思否

Given a 2D board containing 'X' and 'O' (the letter O), capture all regions surrounded by 'X'.

A region is captured by flipping all 'O's into 'X's in that surrounded region.

For example,

X X X X X O O X X X O X X O X X 

After running your function, the board should be:

X X X X X X X X X X X X X O X X 

Note

不得不说,对于这道题而言,Union Find是一种很木讷的模板。

主函数:按矩阵大小建立:
  1. 一个UnionFind类进行后续操作;

  2. 一个dummy结点用来连接边角不可能被X围绕的O;

  3. 一个node()函数对矩阵元素进行结点线性化。

操作:
  1. 遍历所有结点,矩阵边角的O与dummy相连,矩阵内部的O与相邻的O相连;

  2. 遍历所有结点,与dummy相连的结点设置为O,其它所有结点设置为X。

UnionFind函数:建立:
  1. 全局变量parents;

  2. 初始化函数UnionFind(int size);

  3. 查找parents函数find(int node);

  4. 归并函数union(int node1, int node2);

  5. 测试两结点是否相连函数isConnected(int node1, int node2);

操作:
  1. find(int node): 用while循环向上查找node的parent,注意先向上迭代parents[node],再迭代node,否则会超时;

  2. union(int node1, int node2): 找到两个结点的parents,r1和r2,令parents[r1] = r2;

  3. isConnected(int n1, int n2): 查看两个结点的parents是否相等。


Read full article from 【LC总结】Union Find系列(Num of Islands I&II/Graph Valid Tree/etc) - Road to Glory - SegmentFault 思否


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts