<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>二分查找 on Jeanphilo Blog</title><link>https://jeanphilogong.github.io/jeanblog/zh/tags/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/</link><description>Recent content in 二分查找 on Jeanphilo Blog</description><generator>Hugo -- 0.168.0</generator><language>zh-cn</language><lastBuildDate>Fri, 14 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://jeanphilogong.github.io/jeanblog/zh/tags/%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE/index.xml" rel="self" type="application/rss+xml"/><item><title>二分查找区间怎么选：从候选集合到边界更新</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/binary-search-interval-conventions/</link><pubDate>Fri, 14 Aug 2026 00:00:00 +0000</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/binary-search-interval-conventions/</guid><description>从候选集合出发，理解二分查找的闭区间、左闭右开区间和开区间哨兵写法，以及初始化、循环条件与边界更新为什么必须配套。</description></item><item><title>LeetCode 74：搜索二维矩阵</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/74-search-a-2d-matrix/</link><pubDate>Thu, 13 Aug 2026 00:00:00 +0000</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/74-search-a-2d-matrix/</guid><description>&lt;p&gt;给你一个 &lt;code&gt;m x n&lt;/code&gt; 的整数矩阵 &lt;code&gt;matrix&lt;/code&gt; 和一个整数 &lt;code&gt;target&lt;/code&gt;。如果 &lt;code&gt;target&lt;/code&gt; 在矩阵中，返回 &lt;code&gt;True&lt;/code&gt;；否则返回 &lt;code&gt;False&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;题目给出的矩阵满足两个条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每一行都按非递减顺序排列。&lt;/li&gt;
&lt;li&gt;每一行的第一个整数都严格大于上一行的最后一个整数。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;要求算法的时间复杂度为 &lt;code&gt;O(log(m * n))&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;例如，对于下面的矩阵：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;1 3 5 7
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;10 11 16 20
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;23 30 34 60
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;target = 3&lt;/code&gt; 时返回 &lt;code&gt;True&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;target = 13&lt;/code&gt; 时返回 &lt;code&gt;False&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;约束如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1 &amp;lt;= m, n &amp;lt;= 100&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-10^4 &amp;lt;= matrix[i][j], target &amp;lt;= 10^4&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LeetCode 提供的方法签名是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Solution&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;def&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;searchMatrix&lt;/span&gt;(self, matrix: List[List[int]], target: int) &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt; bool:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="第一步扫描每一个元素"&gt;第一步：扫描每一个元素&lt;/h2&gt;
&lt;p&gt;现在只有题目条件和方法签名，还没有一段能判断目标值是否存在的代码。先解决最基本的问题：怎样得到一个可以直接运行、结果确定正确的版本？&lt;/p&gt;
&lt;p&gt;当前基线无法对示例中的 &lt;code&gt;3&lt;/code&gt; 或 &lt;code&gt;13&lt;/code&gt; 给出答案。加入一层遍历每一行的循环，再在当前行中检查每一个值。遇到目标值就立即返回 &lt;code&gt;True&lt;/code&gt;；只有检查完所有元素仍未命中时，才返回 &lt;code&gt;False&lt;/code&gt;。&lt;/p&gt;</description></item><item><title>LeetCode 153：寻找旋转排序数组中的最小值</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/153-find-minimum-in-rotated-sorted-array/</link><pubDate>Tue, 28 Jul 2026 16:13:57 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/153-find-minimum-in-rotated-sorted-array/</guid><description>从线性扫描基线推导包含最小值的闭区间与二分更新，在 O(log n) 时间、O(1) 额外空间内返回旋转数组的最小值。</description></item><item><title>LeetCode 33：搜索旋转排序数组</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/33-search-in-rotated-sorted-array/</link><pubDate>Tue, 28 Jul 2026 15:40:34 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/33-search-in-rotated-sorted-array/</guid><description>从线性扫描基线推导旋转数组中的有序半区与目标范围判断，在 O(log n) 时间、O(1) 额外空间内完成搜索。</description></item><item><title>最大正负数计数：用二分在排序数组中统计正整数和负整数数量的最大值（LeetCode 2529）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/2529-maximum-count-of-positive-integer-and-negative-integer/</link><pubDate>Thu, 04 Dec 2025 11:40:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/2529-maximum-count-of-positive-integer-and-negative-integer/</guid><description>在排序数组中统计正整数和负整数数量的最大值（Maximum Count of Positive &amp;amp; Negative Integers）。本文用上下界二分模板一次性找到负数结束位置和正数起始位置，并给出多语言实现与工程应用示例。</description></item><item><title>比目标字母大的最小字母：有序字符数组上的二分查找技巧（LeetCode 744）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/744-find-smallest-letter-greater-than-target/</link><pubDate>Thu, 04 Dec 2025 11:30:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/744-find-smallest-letter-greater-than-target/</guid><description>在排序字符数组中查找比目标字母大的最小字母（Find Smallest Letter Greater Than Target），支持环绕。本文用 upper_bound 二分模板稳定处理边界，并提供多语言实现和工程实践示例。</description></item><item><title>经典 Binary Search：在排序数组中查找目标值索引的统一模板（LeetCode 704）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/704-binary-search/</link><pubDate>Thu, 04 Dec 2025 11:20:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/binary-search/704-binary-search/</guid><description>在有序数组中查找目标值：存在返回下标，不存在返回 -1。本文以 LeetCode 704 为例，用统一的二分模板讲清楚边界处理，并给出多语言实现和工程实践示例。</description></item><item><title>Hot100：Search Insert Position 排序数组中目标值插入位置的二分查找实战（LeetCode 35）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/35-search-insert-position/</link><pubDate>Thu, 04 Dec 2025 11:10:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/35-search-insert-position/</guid><description>在有序数组中寻找目标值插入位置，使数组仍然有序：存在返回下标，不存在返回应插入的位置。本文用统一的 lower_bound 二分模板实现 Search Insert Position，并给出多语言代码与工程应用示例。</description></item><item><title>LeetCode 34：在排序数组中查找元素的第一个和最后一个位置</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/34-find-first-and-last-position-of-element-in-sorted-array/</link><pubDate>Thu, 04 Dec 2025 11:00:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/hot100/34-find-first-and-last-position-of-element-in-sorted-array/</guid><description>从线性扫描基线出发，推导两个半开区间二分边界，在 O(log n) 时间内返回目标值的完整范围。</description></item><item><title>咒语与药水的成功组合：排序 + 二分查找秒杀乘积约束问题（LeetCode 2300）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2300-successful-pairs-of-spells-and-potions/</link><pubDate>Thu, 04 Dec 2025 10:50:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2300-successful-pairs-of-spells-and-potions/</guid><description>给定 spells 和 potions 两个数组以及 success 阈值，如何用排序 + 二分查找在 O((n+m)log m) 时间内求出每个咒语能与多少药水形成乘积 ≥ success 的成功组合，并给出多语言实现与工程应用示例。</description></item></channel></rss>