Question 2 Number of Island II

Method 1: Brute Force(dfs)

for each position: add

Method 2

Why is a use case for Union Find?

  • 动态图问题:每一次都加入一个新的点

Step 1: 思考时是不是Union Find的Use case: Yes

Step 1.5: Union Find开多长

  • 长度m* n

  • 即便是没有给Board也要自己记录Board为什么?

  • 为了union的时候知道邻居是不是1

Step 2:思考要union什么

  • 上下左右四个方向1

  • 周围的1一定有老大(一定是一个联通分量了)

  • 一个一个operation,一个个query,一个个position(防止重复,防止超界invalid)

  • detail

    • 我们的result从何而来?result是每一次有多少个联通分量,一开始这个图里其实全是0(水),一开始的count= 0;

    • 一般来说,union只能让count变得更少,在哪家这个count呢?每次来一个点,我们就直接默认他自己租整了一个单独的岛,如果他能union别人,union里会吧count减到正常值。

这个方法快在哪?为什么动态图就这么快?

  • 对于每一次的变化

  • dfs: 变了我重来一次,刚才算过我再算一次

  • uf:对于变化的部分union起来,以前算过的仍然存在

Last updated