@@ -80478,53 +80478,8 @@ <h2 id="solutions">Solutions</h2>
80478
80478
<!-- solution:start -->
80479
80479
80480
80480
<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"><</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">>></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"><</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">>></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 < 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>
80528
80483
<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>
80529
80484
<div class="tabbed-content">
80530
80485
<div class="tabbed-block">
@@ -80582,20 +80537,24 @@ <h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
80582
80537
</code></pre></div></td></tr></table></div>
80583
80538
</div>
80584
80539
<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>
80594
80551
<span class="k">public</span><span class="o">:</span>
80595
80552
<span class="w"> </span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">></span><span class="w"> </span><span class="n">searchRange</span><span class="p">(</span><span class="n">vector</span><span class="o"><</span><span class="kt">int</span><span class="o">>&</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>
80596
80553
<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>
80597
80554
<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>
80599
80558
<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>
80600
80559
<span class="w"> </span><span class="p">}</span>
80601
80560
<span class="p">};</span>
@@ -80777,28 +80736,32 @@ <h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
80777
80736
<span class="normal">21</span>
80778
80737
<span class="normal">22</span>
80779
80738
<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>
80781
80742
<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>
80785
80746
<span class="x"> */</span>
80786
-
80787
80747
<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 => $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 > $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 < $right) {</span>
80752
+ <span class="x"> $mid = intdiv($left + $right, 2);</span>
80753
+ <span class="x"> if ($nums[$mid] >= $x) {</span>
80754
+ <span class="x"> $right = $mid;</span>
80755
+ <span class="x"> } else {</span>
80756
+ <span class="x"> $left = $mid + 1;</span>
80798
80757
<span class="x"> }</span>
80799
80758
<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>
80802
80765
<span class="x"> }</span>
80803
80766
<span class="x">}</span>
80804
80767
</code></pre></div></td></tr></table></div>
@@ -80880,14 +80843,14 @@ <h3 id="solution-1-binary-search">Solution 1: Binary Search</h3>
80880
80843
80881
80844
<nav>
80882
80845
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 ">
80884
80847
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 ">
80886
80849
</a>
80887
80850
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 ">
80889
80852
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 ">
80891
80854
</a>
80892
80855
80893
80856
<a href="https://github.com/ZylalMinollari" class="md-author" title="@ZylalMinollari">
0 commit comments