@@ -18875,18 +18875,18 @@
1887518875 <ul class="md-nav__list">
1887618876
1887718877 <li class="md-nav__item">
18878- <a href="#solution-1" class="md-nav__link">
18878+ <a href="#solution-1-dfs " class="md-nav__link">
1887918879 <span class="md-ellipsis">
18880- Solution 1
18880+ Solution 1: DFS
1888118881 </span>
1888218882 </a>
1888318883
1888418884</li>
1888518885
1888618886 <li class="md-nav__item">
18887- <a href="#solution-2" class="md-nav__link">
18887+ <a href="#solution-2-union-find " class="md-nav__link">
1888818888 <span class="md-ellipsis">
18889- Solution 2
18889+ Solution 2: Union-Find
1889018890 </span>
1889118891 </a>
1889218892
@@ -82160,7 +82160,11 @@ <h2 id="description">Description</h2>
8216082160<h2 id="solutions">Solutions</h2>
8216182161<!-- solution:start -->
8216282162
82163- <h3 id="solution-1">Solution 1</h3>
82163+ <h3 id="solution-1-dfs">Solution 1: DFS</h3>
82164+ <p>We create an array $\textit{vis}$ to record whether each city has been visited.</p>
82165+ <p>Next, we traverse each city $i$. If the city has not been visited, we start a depth-first search from that city. Using the matrix $\textit{isConnected}$, we find the cities directly connected to this city. These cities and the current city belong to the same province. We continue the depth-first search for these cities until all cities in the same province have been visited. This counts as one province, so we increment the answer $\textit{ans}$ by $1$. Then, we move to the next unvisited city and repeat the process until all cities have been traversed.</p>
82166+ <p>Finally, return the answer.</p>
82167+ <p>The time complexity is $O(n^2)$, and the space complexity is $O(n)$. Here, $n$ is the number of cities.</p>
8216482168<div class="tabbed-set tabbed-alternate" data-tabs="1:6"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">TypeScript</label><label for="__tabbed_1_6">Rust</label></div>
8216582169<div class="tabbed-content">
8216682170<div class="tabbed-block">
@@ -82284,7 +82288,7 @@ <h3 id="solution-1">Solution 1</h3>
8228482288<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">ans</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span>
8228582289<span class="w"> </span><span class="kt">bool</span><span class="w"> </span><span class="n">vis</span><span class="p">[</span><span class="n">n</span><span class="p">];</span>
8228682290<span class="w"> </span><span class="n">memset</span><span class="p">(</span><span class="n">vis</span><span class="p">,</span><span class="w"> </span><span class="nb">false</span><span class="p">,</span><span class="w"> </span><span class="k">sizeof</span><span class="p">(</span><span class="n">vis</span><span class="p">));</span>
82287- <span class="w"> </span><span class="n">function </span><span class="o">< </span><span class="kt">void </span><span class="p">( </span><span class="kt">int </span><span class="p">) </span><span class="o">> ;</span><span class="w"> </span><span class="n">dfs </span><span class="w"> </span><span class="o">= </span><span class="w"> </span><span class="p">[ </span><span class="o">& </span><span class="p">]( </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
82291+ <span class="w"> </span><span class="k">auto </span><span class="w"> </span><span class="n">dfs </span><span class="w"> </span><span class="o">= </span><span class="w"> </span><span class=" p">[ </span><span class="o">& ;</span><span class="p">]( </span><span class="k">this </span><span class="w"> </span><span class="k">auto</span><span class="o">&& </span><span class="w"> </span><span class="n">dfs </span><span class="p">, </span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="kt">void </span><span class="w"> </span><span class="p">{</span>
8228882292<span class="w"> </span><span class="n">vis</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
8228982293<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span><span class="w"> </span><span class="n">j</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="n">n</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="n">j</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
8229082294<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="n">vis</span><span class="p">[</span><span class="n">j</span><span class="p">]</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">isConnected</span><span class="p">[</span><span class="n">i</span><span class="p">][</span><span class="n">j</span><span class="p">])</span><span class="w"> </span><span class="p">{</span>
@@ -82445,7 +82449,11 @@ <h3 id="solution-1">Solution 1</h3>
8244582449
8244682450<!-- solution:start -->
8244782451
82448- <h3 id="solution-2">Solution 2</h3>
82452+ <h3 id="solution-2-union-find">Solution 2: Union-Find</h3>
82453+ <p>We can also use the union-find data structure to maintain each connected component. Initially, each city belongs to a different connected component, so the number of provinces is $n$.</p>
82454+ <p>Next, we traverse the matrix $\textit{isConnected}$. If there is a connection between two cities $(i, j)$ and they belong to two different connected components, they will be merged into one connected component, and the number of provinces is decremented by $1$.</p>
82455+ <p>Finally, return the number of provinces.</p>
82456+ <p>The time complexity is $O(n^2 \times \log n)$, and the space complexity is $O(n)$. Here, $n$ is the number of cities, and $\log n$ is the time complexity of path compression in the union-find data structure.</p>
8244982457<div class="tabbed-set tabbed-alternate" data-tabs="2:5"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Python3</label><label for="__tabbed_2_2">Java</label><label for="__tabbed_2_3">C++</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">TypeScript</label></div>
8245082458<div class="tabbed-content">
8245182459<div class="tabbed-block">
@@ -82583,7 +82591,7 @@ <h3 id="solution-2">Solution 2</h3>
8258382591<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">isConnected</span><span class="p">.</span><span class="n">size</span><span class="p">();</span>
8258482592<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">p</span><span class="p">[</span><span class="n">n</span><span class="p">];</span>
8258582593<span class="w"> </span><span class="n">iota</span><span class="p">(</span><span class="n">p</span><span class="p">,</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">n</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">);</span>
82586- <span class="w"> </span><span class="n">function </span><span class="o">< </span><span class="kt">int </span><span class="p">( </span><span class="kt">int </span><span class="p">) </span><span class="o">> ;</span><span class="w"> </span><span class="n">find </span><span class="w"> </span><span class="o">= </span><span class="w"> </span><span class="p">[ </span><span class="o">& </span><span class="p">]( </span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="p">{</span>
82594+ <span class="w"> </span><span class="k">auto </span><span class="w"> </span><span class="n">find </span><span class="w"> </span><span class="o">= </span><span class="w"> </span><span class=" p">[ </span><span class="o">& ;</span><span class="p">]( </span><span class="k">this </span><span class="w"> </span><span class="k">auto</span><span class="o">&& </span><span class="w"> </span><span class="n">find </span><span class="p">, </span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="o">-></span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="p">{</span>
8258782595<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
8258882596<span class="w"> </span><span class="n">p</span><span class="p">[</span><span class="n">x</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">find</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="n">x</span><span class="p">]);</span>
8258982597<span class="w"> </span><span class="p">}</span>
@@ -82686,15 +82694,9 @@ <h3 id="solution-2">Solution 2</h3>
8268682694<span class="normal">21</span>
8268782695<span class="normal">22</span>
8268882696<span class="normal">23</span>
82689- <span class="normal">24</span>
82690- <span class="normal">25</span>
82691- <span class="normal">26</span>
82692- <span class="normal">27</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">findCircleNum</span><span class="p">(</span><span class="nx">isConnected</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[][])</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
82697+ <span class="normal">24</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">findCircleNum</span><span class="p">(</span><span class="nx">isConnected</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[][])</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
8269382698<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">isConnected</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span>
82694- <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">p</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="nx">n</span><span class="p">);</span>
82695- <span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span><span class="w"> </span><span class="nx">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">n</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
82696- <span class="w"> </span><span class="nx">p</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">i</span><span class="p">;</span>
82697- <span class="w"> </span><span class="p">}</span>
82699+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">p</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">.</span><span class="kr">from</span><span class="p">({</span><span class="w"> </span><span class="nx">length</span><span class="o">:</span><span class="w"> </span><span class="kt">n</span><span class="w"> </span><span class="p">},</span><span class="w"> </span><span class="p">(</span><span class="nx">_</span><span class="p">,</span><span class="w"> </span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">i</span><span class="p">);</span>
8269882700<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">find</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">x</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="p">{</span>
8269982701<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">p</span><span class="p">[</span><span class="nx">x</span><span class="p">]</span><span class="w"> </span><span class="o">!==</span><span class="w"> </span><span class="nx">x</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
8270082702<span class="w"> </span><span class="nx">p</span><span class="p">[</span><span class="nx">x</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">find</span><span class="p">(</span><span class="nx">p</span><span class="p">[</span><span class="nx">x</span><span class="p">]);</span>
0 commit comments