二分查找
文章平均质量分 77
flashlight_hi
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
LeetCode 分类刷题:154. 寻找旋转排序数组中的最小值 II
题目要求在旋转后的有序数组(含重复元素)中寻找最小值。原数组升序排列,经1到n次旋转后,最小值可能位于任意位置。对于不含重复元素的情况,可通过二分法比较中间元素与右边界值来判断最小值位置。但当存在重复元素时(如x等于右边界值),无法直接判断其位于哪一段递增序列。此时需特殊处理:当x等于右边界时,逐步缩小右边界直至不相等,再应用二分法。该算法的时间复杂度为O(log n),最坏情况下退化为O(n)。原创 2025-10-09 10:38:59 · 872 阅读 · 0 评论 -
LeetCode 分类刷题:1901. 寻找峰值 II
该算法在m×n矩阵中寻找峰值元素。通过二分法在行维度上搜索,每次比较当前行最大值与下一行对应位置的值,从而确定峰值所在行范围。时间复杂度为O(nlogm),空间复杂度O(1)。算法初始将搜索范围设为[0,m-2],避免越界判断,最终返回找到的峰值行列索引。关键点在于利用行最大值与相邻行的比较来缩小搜索范围。原创 2025-10-07 17:17:05 · 461 阅读 · 0 评论 -
LeetCode 分类刷题:74. 搜索二维矩阵
本文探讨了在特殊有序矩阵中查找目标值的问题。该矩阵满足:每行递增且每行首元素大于前一行末元素。提出了两种解法:1)逐行二分查找,时间复杂度O(mlogn);2)将矩阵视为整体有序数组进行二分查找,时间复杂度O(log(mn))。后者通过数学映射将二维索引转换为一维坐标,显著提升了查找效率。两种方法均只需常数空间。原创 2025-10-05 11:32:33 · 442 阅读 · 0 评论 -
LeetCode 分类刷题:33. 搜索旋转排序数组
该问题要求在旋转后的有序数组中查找目标值,时间复杂度须为O(logn)。采用二分查找,通过判断中间元素与数组末尾元素的关系来确定目标值所在区间。若中间元素大于末尾元素,则处于第一递增序列;否则处于第二递增序列。再根据目标值与中间元素、末尾元素的大小关系调整搜索范围。最终返回目标值索引或-1。该方法有效利用了二分查找的特性,确保在旋转数组中快速定位目标值。原创 2025-09-29 15:56:43 · 440 阅读 · 0 评论 -
LeetCode 分类刷题:153. 寻找旋转排序数组中的最小值
给定一个经过多次旋转的升序数组,要求设计O(logn)算法找出最小元素。通过二分查找思想,比较中间元素与末尾元素的大小来缩小搜索范围:若中间元素大于末尾元素,则最小值在其右边;若中间元素小于等于末尾元素,否则最小值在该位置或其左边。最终返回右指针所指元素即为最小值。该算法时间复杂度为O(logn),空间复杂度O(1)。原创 2025-09-27 11:57:08 · 400 阅读 · 0 评论 -
LeetCode 分类刷题:162. 寻找峰值
该文章介绍了如何在O(logn)时间复杂度内找到数组中的峰值元素。峰值元素定义为严格大于相邻元素的数值。通过二分查找法,设置初始区间为(-1, n-1),根据中间元素与右侧元素比较确定峰值位置:若nums[mid]大于nums[mid+1],则峰值在mid或左侧,更新right;否则在右侧,更新left。最终返回right指针指向的峰值索引。这种方法确保了高效查找,满足题目要求的对数时间复杂度。原创 2025-09-26 22:30:06 · 424 阅读 · 0 评论 -
LeetCode 分类刷题:2517. 礼盒的最大甜蜜度
题目要求在给定糖果价格数组price和整数k的情况下,组合k类不同糖果形成礼盒,使任意两种糖果价格绝对差的最小值(甜蜜度)最大化。通过排序数组后采用二分查找法,对可能的甜蜜度进行验证,使用贪心策略,通过定义check函数统计满足条件的糖果数量,验证当前甜蜜度能否选出足够种类的糖果,根据结果调整二分。最终返回满足条件的最大甜蜜度。原创 2025-09-21 16:19:38 · 391 阅读 · 0 评论 -
LeetCode 分类刷题:2439. 最小化数组中的最大值
本文探讨如何通过操作数组使最大值最小化。给定一个非负整数数组,每次操作可将某个元素减1并将其前一个元素加1。通过二分查找确定可能的最小最大值:下界为数组最小值减1,上界为数组最大值。算法从后往前遍历数组,检查当前元素与额外值之和是否超过限制。时间复杂度为O(nlogU),空间复杂度O(1),其中n为数组长度,U为数组最大值。原创 2025-09-19 16:18:40 · 359 阅读 · 0 评论 -
LeetCode 分类刷题:2861. 最大合金数
本文介绍了一种在预算限制下最大化合金生产的方法。该问题涉及n种金属、k台机器,每台机器有特定的金属配方。通过二分查找确定每台机器能生产的最大合金数量:对于每台机器,计算生产num份合金所需购买的金属成本,若总成本不超过预算则可行。算法遍历所有机器,保留最大可行解。时间复杂度为O(knlogU),空间复杂度O(1),其中U由初始库存和预算决定。原创 2025-09-17 17:01:51 · 491 阅读 · 0 评论 -
LeetCode 分类刷题:2187. 完成旅途的最少时间
该算法通过二分查找确定完成指定旅途数的最少时间。初始化时间范围为[0, max_time*totalTrips],通过计算中间时刻各公交车能完成的旅途总数,动态调整时间范围:若总数不足则延长时间,否则缩短时间。最终返回满足条件的最小时间。该算法时间复杂度为O(nlog(max_time*totalTrips)),空间复杂度O(1)。原创 2025-09-14 18:17:03 · 402 阅读 · 0 评论 -
LeetCode 分类刷题:875. 爱吃香蕉的珂珂
珂珂需要在h小时内吃完n堆香蕉,求最小进食速度k。通过二分法在[sum/h, max(piles)]区间内搜索最优解:计算中间速度mid,遍历数组求总耗时t,若t大于h则提速,否则减速。最终返回满足条件的最小k值。该算法时间复杂度O(nlogU),空间复杂度O(1)。原创 2025-09-14 10:53:11 · 423 阅读 · 0 评论 -
LeetCode 分类刷题:275. H 指数 II
本文介绍了一种在非降序排列的论文引用次数数组中计算研究者h指数的方法。h指数定义为至少有h篇论文被引用至少h次。通过二分查找在[0, n]范围内寻找满足条件的最大h值,其中n为论文总数。算法时间复杂度为O(logn),空间复杂度O(1)。关键点在于判断数组末尾的h篇论文是否都至少有h次引用,从而调整二分区间。该方法由灵茶山艾府在LeetCode上提出。原创 2025-09-09 22:59:55 · 442 阅读 · 0 评论 -
LeetCode 分类刷题:2563. 统计公平数对的数目
题目要求在数组nums中统计满足条件的公平数对(i,j),其中i小于j且nums[i]+nums[j]在[lower,upper]区间内。解析表明,排序不影响答案的正确性,因为加法满足交换律且数对组合不变。通过排序后使用二分查找优化:对于每个元素nums[j],在[0,j-1]范围内查找满足lower-nums[j] ≤ nums[i] ≤ upper-nums[j]的元素个数。时间复杂度为O(nlogn),空间复杂度O(1)。Python实现利用bisect模块进行高效二分查找,最终返回符合条件的数对。原创 2025-09-08 20:57:34 · 646 阅读 · 0 评论 -
LeetCode 分类刷题:2300. 咒语和药水的成功对数
该问题要求计算每个咒语与药水相乘后达到成功值的组合数。通过先对药水数组排序,再利用二分查找进行优化,可将时间复杂度从O(nm)降低到O((n+m)logm)。具体步骤是:1)对药水数组排序;2)对每个咒语,计算所需最小药水值(success-1)//x,用二分查找统计符合条件的药水数量。这种方法显著提高了效率,空间复杂度为O(1)。示例代码展示了Python中使用bisect模块的实现方式。原创 2025-08-25 10:39:36 · 648 阅读 · 0 评论 -
LeetCode 分类刷题:2529. 正整数和负整数的最大计数
本文介绍了一种统计有序数组中正负数数量的高效方法。通过二分查找定位最后一个负数和第一个非负数的位置,然后跳过零值找到第一个正数,最后比较正负数的数量并返回较大值。算法时间复杂度为O(logn)的二分查找加上O(n)的线性扫描,但实际效率优于直接遍历。空间复杂度为O(1)。该方法适用于处理大规模有序数组的统计问题。优化方法利用了Python3二分查找库函数bisect(),时间复杂度为O(logn)。原创 2025-08-23 16:28:03 · 301 阅读 · 0 评论 -
LeetCode 分类刷题:34. 在排序数组中查找元素的第一个和最后一个位置
本文介绍了如何在有序数组中查找目标值的起始和结束位置。通过设计时间复杂度为O(logn)的二分查找算法,利用lower_bound函数分别找到第一个≥target和第一个≥target+1的位置,从而确定目标值的区间。文章详细解析了二分查找的实现细节,包括边界处理、区间选择等关键问题,并提供了Python代码实现。对于目标值不存在的情况返回[-1,-1]。该方法高效且简洁,适用于大规模数据查找。原创 2025-08-22 10:40:01 · 845 阅读 · 0 评论
分享