@@ -11834,18 +11834,18 @@
11834
11834
<ul class="md-nav__list">
11835
11835
11836
11836
<li class="md-nav__item">
11837
- <a href="#solution-1" class="md-nav__link">
11837
+ <a href="#solution-1-binary-search " class="md-nav__link">
11838
11838
<span class="md-ellipsis">
11839
- Solution 1
11839
+ Solution 1: Binary Search
11840
11840
</span>
11841
11841
</a>
11842
11842
11843
11843
</li>
11844
11844
11845
11845
<li class="md-nav__item">
11846
- <a href="#solution-2" class="md-nav__link">
11846
+ <a href="#solution-2-search-from-the-bottom-left-or-top-right " class="md-nav__link">
11847
11847
<span class="md-ellipsis">
11848
- Solution 2
11848
+ Solution 2: Search from the Bottom Left or Top Right
11849
11849
</span>
11850
11850
</a>
11851
11851
@@ -75342,7 +75342,10 @@ <h2 id="description">Description</h2>
75342
75342
</ul>
75343
75343
75344
75344
<h2 id="solutions">Solutions</h2>
75345
- <h3 id="solution-1">Solution 1</h3>
75345
+ <h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
75346
+ <p>Since all elements in each row are sorted in ascending order, we can use binary search to find the first element that is greater than or equal to <code>target</code> for each row, and then check if this element is equal to <code>target</code>. If it equals <code>target</code>, it means the target value has been found, and we directly return <code>true</code>. If it does not equal <code>target</code>, it means all elements in this row are less than <code>target</code>, and we should continue to search the next row.</p>
75347
+ <p>If all rows have been searched and the target value has not been found, it means the target value does not exist, so we return <code>false</code>.</p>
75348
+ <p>The time complexity is $O(m \times \log n)$, where $m$ and $n$ are the number of rows and columns in the matrix, respectively. The space complexity is $O(1)$.</p>
75346
75349
<div class="tabbed-set tabbed-alternate" data-tabs="1:8"><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" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" 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><label for="__tabbed_1_7">JavaScript</label><label for="__tabbed_1_8">C#</label></div>
75347
75350
<div class="tabbed-content">
75348
75351
<div class="tabbed-block">
@@ -75597,7 +75600,15 @@ <h3 id="solution-1">Solution 1</h3>
75597
75600
</div>
75598
75601
</div>
75599
75602
</div>
75600
- <h3 id="solution-2">Solution 2</h3>
75603
+ <h3 id="solution-2-search-from-the-bottom-left-or-top-right">Solution 2: Search from the Bottom Left or Top Right</h3>
75604
+ <p>Here, we start searching from the bottom left corner and move towards the top right direction, comparing the current element <code>matrix[i][j]</code> with <code>target</code>:</p>
75605
+ <ul>
75606
+ <li>If $\text{matrix}[i][j] = \text{target}$, it means the target value has been found, and we directly return <code>true</code>.</li>
75607
+ <li>If $\text{matrix}[i][j] > \text{target}$, it means all elements in this column from the current position upwards are greater than <code>target</code>, so we should move the $i$ pointer upwards, i.e., $i \leftarrow i - 1$.</li>
75608
+ <li>If $\text{matrix}[i][j] < \text{target}$, it means all elements in this row from the current position to the right are less than <code>target</code>, so we should move the $j$ pointer to the right, i.e., $j \leftarrow j + 1$.</li>
75609
+ </ul>
75610
+ <p>If the search ends and the <code>target</code> is still not found, return <code>false</code>.</p>
75611
+ <p>The time complexity is $O(m + n)$, where $m$ and $n$ are the number of rows and columns in the matrix, respectively. The space complexity is $O(1)$.</p>
75601
75612
<div class="tabbed-set tabbed-alternate" data-tabs="2:6"><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" /><input id="__tabbed_2_6" 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><label for="__tabbed_2_6">C#</label></div>
75602
75613
<div class="tabbed-content">
75603
75614
<div class="tabbed-block">
@@ -75747,16 +75758,14 @@ <h3 id="solution-2">Solution 2</h3>
75747
75758
<span class="normal">12</span>
75748
75759
<span class="normal">13</span>
75749
75760
<span class="normal">14</span>
75750
- <span class="normal">15</span>
75751
- <span class="normal">16</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">searchMatrix</span><span class="p">(</span><span class="nx">matrix</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[][],</span><span class="w"> </span><span class="nx">target</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">boolean</span><span class="w"> </span><span class="p">{</span>
75752
- <span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">m</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">matrix</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span>
75753
- <span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">matrix</span><span class="p">[</span><span class="mf">0</span><span class="p">].</span><span class="nx">length</span><span class="p">;</span>
75754
- <span class="w"> </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="nx">m</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">,</span>
75755
- <span class="w"> </span><span class="nx">j</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
75761
+ <span class="normal">15</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">searchMatrix</span><span class="p">(</span><span class="nx">matrix</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[][],</span><span class="w"> </span><span class="nx">target</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">boolean</span><span class="w"> </span><span class="p">{</span>
75762
+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="p">[</span><span class="nx">m</span><span class="p">,</span><span class="w"> </span><span class="nx">n</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="nx">matrix</span><span class="p">.</span><span class="nx">length</span><span class="p">,</span><span class="w"> </span><span class="nx">matrix</span><span class="p">[</span><span class="mf">0</span><span class="p">].</span><span class="nx">length</span><span class="p">];</span>
75763
+ <span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="p">[</span><span class="nx">i</span><span class="p">,</span><span class="w"> </span><span class="nx">j</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="nx">m</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mf">1</span><span class="p">,</span><span class="w"> </span><span class="mf">0</span><span class="p">];</span>
75756
75764
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</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="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nx">j</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="p">{</span>
75757
- <span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">cur</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">matrix</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">j</span><span class="p">];</span>
75758
- <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">cur</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nx">target</span><span class="p">)</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
75759
- <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">cur</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nx">target</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
75765
+ <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">matrix</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">j</span><span class="p">]</span><span class="w"> </span><span class="o">===</span><span class="w"> </span><span class="nx">target</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
75766
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="kc">true</span><span class="p">;</span>
75767
+ <span class="w"> </span><span class="p">}</span>
75768
+ <span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">matrix</span><span class="p">[</span><span class="nx">i</span><span class="p">][</span><span class="nx">j</span><span class="p">]</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="nx">target</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
75760
75769
<span class="w"> </span><span class="o">--</span><span class="nx">i</span><span class="p">;</span>
75761
75770
<span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="p">{</span>
75762
75771
<span class="w"> </span><span class="o">++</span><span class="nx">j</span><span class="p">;</span>
0 commit comments