Skip to content

Commit 5b27ff5

Browse files
committed
deploy: fc7a458
1 parent cb1bc26 commit 5b27ff5

File tree

4 files changed

+83
-155
lines changed

4 files changed

+83
-155
lines changed

en/lc/34/index.html

Lines changed: 41 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -80478,53 +80478,8 @@ <h2 id="solutions">Solutions</h2>
8047880478
<!-- solution:start -->
8047980479

8048080480
<h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
80481-
<p>We can perform binary search twice to find the left and right boundaries respectively.</p>
80482-
<p>The time complexity is $O(\log n)$, and the space complexity is $O(1)$. Here, $n$ is the length of the array $nums$.</p>
80483-
<p>Below are two general templates for binary search:</p>
80484-
<p>Template 1:</p>
80485-
<div class="highlight"><pre><span></span><code><span class="kt">boolean</span><span class="w"> </span><span class="nf">check</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="p">{</span>
80486-
<span class="p">}</span>
80487-
80488-
<span class="kt">int</span><span class="w"> </span><span class="nf">search</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">left</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">right</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
80489-
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">right</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
80490-
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">left</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">right</span><span class="p">)</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
80491-
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">check</span><span class="p">(</span><span class="n">mid</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
80492-
<span class="w"> </span><span class="n">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mid</span><span class="p">;</span>
80493-
<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>
80494-
<span class="w"> </span><span class="n">left</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mid</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
80495-
<span class="w"> </span><span class="p">}</span>
80496-
<span class="w"> </span><span class="p">}</span>
80497-
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">left</span><span class="p">;</span>
80498-
<span class="p">}</span>
80499-
</code></pre></div>
80500-
<p>Template 2:</p>
80501-
<div class="highlight"><pre><span></span><code><span class="kt">boolean</span><span class="w"> </span><span class="nf">check</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="p">{</span>
80502-
<span class="p">}</span>
80503-
80504-
<span class="kt">int</span><span class="w"> </span><span class="nf">search</span><span class="p">(</span><span class="kt">int</span><span class="w"> </span><span class="n">left</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">right</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
80505-
<span class="w"> </span><span class="k">while</span><span class="w"> </span><span class="p">(</span><span class="n">left</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="n">right</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
80506-
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">mid</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">left</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">right</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">&gt;&gt;</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
80507-
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">check</span><span class="p">(</span><span class="n">mid</span><span class="p">))</span><span class="w"> </span><span class="p">{</span>
80508-
<span class="w"> </span><span class="n">left</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mid</span><span class="p">;</span>
80509-
<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>
80510-
<span class="w"> </span><span class="n">right</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">mid</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span>
80511-
<span class="w"> </span><span class="p">}</span>
80512-
<span class="w"> </span><span class="p">}</span>
80513-
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">left</span><span class="p">;</span>
80514-
<span class="p">}</span>
80515-
</code></pre></div>
80516-
<p>When doing binary search problems, you can follow the following routine:</p>
80517-
<ol>
80518-
<li>Write out the loop condition $left &lt; right$;</li>
80519-
<li>Inside the loop, you might as well write $mid = \lfloor \frac{left + right}{2} \rfloor$ first;</li>
80520-
<li>According to the specific problem, implement the $check()$ function (sometimes the logic is very simple, you can not define $check$), think about whether to use $right = mid$ (Template $1$) or $left = mid$ (Template $2$);<ul>
80521-
<li>If $right = mid$, then write the else statement $left = mid + 1$, and there is no need to change the calculation of $mid$, that is, keep $mid = \lfloor \frac{left + right}{2} \rfloor$;</li>
80522-
<li>If $left = mid$, then write the else statement $right = mid - 1$, and add +1 when calculating $mid$, that is, $mid = \lfloor \frac{left + right + 1}{2} \rfloor$;</li>
80523-
</ul>
80524-
</li>
80525-
<li>When the loop ends, $left$ equals $right$.</li>
80526-
</ol>
80527-
<p>Note that the advantage of these two templates is that they always keep the answer within the binary search interval, and the value corresponding to the end condition of the binary search is exactly at the position of the answer. For the case that may have no solution, just check whether the $left$ or $right$ after the binary search ends satisfies the problem.</p>
80481+
<p>We can perform two binary searches to find the left boundary and the right boundary.</p>
80482+
<p>The time complexity is $O(\log n)$, where $n$ is the length of the array $\textit{nums}$. The space complexity is $O(1)$.</p>
8052880483
<div class="tabbed-set tabbed-alternate" data-tabs="1:9"><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" /><input id="__tabbed_1_9" 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">PHP</label><label for="__tabbed_1_9">Kotlin</label></div>
8052980484
<div class="tabbed-content">
8053080485
<div class="tabbed-block">
@@ -80582,20 +80537,24 @@ <h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
8058280537
</code></pre></div></td></tr></table></div>
8058380538
</div>
8058480539
<div class="tabbed-block">
80585-
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
80586-
<span class="normal">2</span>
80587-
<span class="normal">3</span>
80588-
<span class="normal">4</span>
80589-
<span class="normal">5</span>
80590-
<span class="normal">6</span>
80591-
<span class="normal">7</span>
80592-
<span class="normal">8</span>
80593-
<span class="normal">9</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Solution</span><span class="w"> </span><span class="p">{</span>
80540+
<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
80541+
<span class="normal"> 2</span>
80542+
<span class="normal"> 3</span>
80543+
<span class="normal"> 4</span>
80544+
<span class="normal"> 5</span>
80545+
<span class="normal"> 6</span>
80546+
<span class="normal"> 7</span>
80547+
<span class="normal"> 8</span>
80548+
<span class="normal"> 9</span>
80549+
<span class="normal">10</span>
80550+
<span class="normal">11</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Solution</span><span class="w"> </span><span class="p">{</span>
8059480551
<span class="k">public</span><span class="o">:</span>
8059580552
<span class="w"> </span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;</span><span class="w"> </span><span class="n">searchRange</span><span class="p">(</span><span class="n">vector</span><span class="o">&lt;</span><span class="kt">int</span><span class="o">&gt;&amp;</span><span class="w"> </span><span class="n">nums</span><span class="p">,</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">target</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
8059680553
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">l</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lower_bound</span><span class="p">(</span><span class="n">nums</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span><span class="w"> </span><span class="n">nums</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span><span class="w"> </span><span class="n">target</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">nums</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
8059780554
<span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">lower_bound</span><span class="p">(</span><span class="n">nums</span><span class="p">.</span><span class="n">begin</span><span class="p">(),</span><span class="w"> </span><span class="n">nums</span><span class="p">.</span><span class="n">end</span><span class="p">(),</span><span class="w"> </span><span class="n">target</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="n">nums</span><span class="p">.</span><span class="n">begin</span><span class="p">();</span>
80598-
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">l</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">{</span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">};</span>
80555+
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">l</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="n">r</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
80556+
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">{</span><span class="mi">-1</span><span class="p">,</span><span class="w"> </span><span class="mi">-1</span><span class="p">};</span>
80557+
<span class="w"> </span><span class="p">}</span>
8059980558
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">{</span><span class="n">l</span><span class="p">,</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="mi">1</span><span class="p">};</span>
8060080559
<span class="w"> </span><span class="p">}</span>
8060180560
<span class="p">};</span>
@@ -80777,28 +80736,32 @@ <h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
8077780736
<span class="normal">21</span>
8077880737
<span class="normal">22</span>
8077980738
<span class="normal">23</span>
80780-
<span class="normal">24</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="x">class Solution {</span>
80739+
<span class="normal">24</span>
80740+
<span class="normal">25</span>
80741+
<span class="normal">26</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="x">class Solution {</span>
8078180742
<span class="x"> /**</span>
80782-
<span class="x"> * @param integer[] $nums</span>
80783-
<span class="x"> * @param integer $target</span>
80784-
<span class="x"> * @return integer[]</span>
80743+
<span class="x"> * @param Integer[] $nums</span>
80744+
<span class="x"> * @param Integer $target</span>
80745+
<span class="x"> * @return Integer[]</span>
8078580746
<span class="x"> */</span>
80786-
8078780747
<span class="x"> function searchRange($nums, $target) {</span>
80788-
<span class="x"> $min = -1;</span>
80789-
<span class="x"> $max = -1;</span>
80790-
<span class="x"> foreach ($nums as $key =&gt; $value) {</span>
80791-
<span class="x"> if ($value == $target) {</span>
80792-
<span class="x"> if ($min == -1) {</span>
80793-
<span class="x"> $min = $key;</span>
80794-
<span class="x"> }</span>
80795-
80796-
<span class="x"> if ($key &gt; $max) {</span>
80797-
<span class="x"> $max = $key;</span>
80748+
<span class="x"> $search = function ($x) use ($nums) {</span>
80749+
<span class="x"> $left = 0;</span>
80750+
<span class="x"> $right = count($nums);</span>
80751+
<span class="x"> while ($left &lt; $right) {</span>
80752+
<span class="x"> $mid = intdiv($left + $right, 2);</span>
80753+
<span class="x"> if ($nums[$mid] &gt;= $x) {</span>
80754+
<span class="x"> $right = $mid;</span>
80755+
<span class="x"> } else {</span>
80756+
<span class="x"> $left = $mid + 1;</span>
8079880757
<span class="x"> }</span>
8079980758
<span class="x"> }</span>
80800-
<span class="x"> }</span>
80801-
<span class="x"> return [$min, $max];</span>
80759+
<span class="x"> return $left;</span>
80760+
<span class="x"> };</span>
80761+
80762+
<span class="x"> $l = $search($target);</span>
80763+
<span class="x"> $r = $search($target + 1);</span>
80764+
<span class="x"> return $l === $r ? [-1, -1] : [$l, $r - 1];</span>
8080280765
<span class="x"> }</span>
8080380766
<span class="x">}</span>
8080480767
</code></pre></div></td></tr></table></div>
@@ -80880,14 +80843,14 @@ <h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
8088080843

8088180844
<nav>
8088280845

80883-
<a href="https://github.com/Zuoqiu-Yingyi" class="md-author" title="@Zuoqiu-Yingyi">
80846+
<a href="https://github.com/yanglbme" class="md-author" title="@yanglbme">
8088480847

80885-
<img src="https://avatars.githubusercontent.com/u/49649786?v=4&size=72" alt="Zuoqiu-Yingyi">
80848+
<img src="https://avatars.githubusercontent.com/u/21008209?v=4&size=72" alt="yanglbme">
8088680849
</a>
8088780850

80888-
<a href="https://github.com/yanglbme" class="md-author" title="@yanglbme">
80851+
<a href="https://github.com/Zuoqiu-Yingyi" class="md-author" title="@Zuoqiu-Yingyi">
8088980852

80890-
<img src="https://avatars.githubusercontent.com/u/21008209?v=4&size=72" alt="yanglbme">
80853+
<img src="https://avatars.githubusercontent.com/u/49649786?v=4&size=72" alt="Zuoqiu-Yingyi">
8089180854
</a>
8089280855

8089380856
<a href="https://github.com/ZylalMinollari" class="md-author" title="@ZylalMinollari">

en/search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)