mirror of
https://github.com/krahets/hello-algo.git
synced 2025-07-28 04:42:48 +08:00
deploy
This commit is contained in:
@ -3496,11 +3496,11 @@
|
||||
<p>给定一个长度为 <span class="arithmatex">\(n\)</span> 的有序数组 <code>nums</code> ,数组可能包含重复元素。请返回数组中最左一个元素 <code>target</code> 的索引。若数组中不包含该元素,则返回 <span class="arithmatex">\(-1\)</span> 。</p>
|
||||
</div>
|
||||
<p>回忆二分查找插入点的方法,搜索完成后 <span class="arithmatex">\(i\)</span> 指向最左一个 <code>target</code> ,<strong>因此查找插入点本质上是在查找最左一个 <code>target</code> 的索引</strong>。</p>
|
||||
<p>考虑通过查找插入点的函数实现查找左边界。请注意,数组中可能不包含 <code>target</code> ,此时有两种可能:</p>
|
||||
<ol>
|
||||
<li>插入点的索引 <span class="arithmatex">\(i\)</span> 越界;</li>
|
||||
<li>元素 <code>nums[i]</code> 与 <code>target</code> 不相等;</li>
|
||||
</ol>
|
||||
<p>考虑通过查找插入点的函数实现查找左边界。请注意,数组中可能不包含 <code>target</code> ,这种情况可能导致以下两种结果。</p>
|
||||
<ul>
|
||||
<li>插入点的索引 <span class="arithmatex">\(i\)</span> 越界。</li>
|
||||
<li>元素 <code>nums[i]</code> 与 <code>target</code> 不相等。</li>
|
||||
</ul>
|
||||
<p>当遇到以上两种情况时,直接返回 <span class="arithmatex">\(-1\)</span> 即可。</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="1:12"><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" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><input id="__tabbed_1_11" name="__tabbed_1" type="radio" /><input id="__tabbed_1_12" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Java</label><label for="__tabbed_1_2">C++</label><label for="__tabbed_1_3">Python</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">JS</label><label for="__tabbed_1_6">TS</label><label for="__tabbed_1_7">C</label><label for="__tabbed_1_8">C#</label><label for="__tabbed_1_9">Swift</label><label for="__tabbed_1_10">Zig</label><label for="__tabbed_1_11">Dart</label><label for="__tabbed_1_12">Rust</label></div>
|
||||
<div class="tabbed-content">
|
||||
@ -3767,8 +3767,8 @@
|
||||
</div>
|
||||
</div>
|
||||
<h3 id="2">2. 转化为查找元素<a class="headerlink" href="#2" title="Permanent link">¶</a></h3>
|
||||
<p>我们知道,当数组不包含 <code>target</code> 时,最后 <span class="arithmatex">\(i\)</span> , <span class="arithmatex">\(j\)</span> 会分别指向首个大于、小于 <code>target</code> 的元素。</p>
|
||||
<p>根据上述结论,我们可以构造一个数组中不存在的元素,用于查找左右边界,如图 10-8 所示。</p>
|
||||
<p>我们知道,当数组不包含 <code>target</code> 时,最终 <span class="arithmatex">\(i\)</span> 和 <span class="arithmatex">\(j\)</span> 会分别指向首个大于、小于 <code>target</code> 的元素。</p>
|
||||
<p>因此,如图 10-8 所示,我们可以构造一个数组中不存在的元素,用于查找左右边界。</p>
|
||||
<ul>
|
||||
<li>查找最左一个 <code>target</code> :可以转化为查找 <code>target - 0.5</code> ,并返回指针 <span class="arithmatex">\(i\)</span> 。</li>
|
||||
<li>查找最右一个 <code>target</code> :可以转化为查找 <code>target + 0.5</code> ,并返回指针 <span class="arithmatex">\(j\)</span> 。</li>
|
||||
@ -3776,7 +3776,7 @@
|
||||
<p><img alt="将查找边界转化为查找元素" src="../binary_search_edge.assets/binary_search_edge_by_element.png" /></p>
|
||||
<p align="center"> 图 10-8 将查找边界转化为查找元素 </p>
|
||||
|
||||
<p>代码在此省略,值得注意的有:</p>
|
||||
<p>代码在此省略,值得注意以下两点。</p>
|
||||
<ul>
|
||||
<li>给定数组不包含小数,这意味着我们无须关心如何处理相等的情况。</li>
|
||||
<li>因为该方法引入了小数,所以需要将函数中的变量 <code>target</code> 改为浮点数类型。</li>
|
||||
|
Reference in New Issue
Block a user