二分查找的特性及应用

本文探讨了二分查找在解决有序数组问题中的关键作用,详细分析了如何利用二分查找来统计排序数组中特定数字出现的次数。通过修改二分查找算法,可以找到目标数字的第一个和最后一个位置,从而避免编写两个独立的函数。此外,文章还介绍了如何通过二分查找解决数组旋转后的最小值问题,进一步展示了二分法在实际问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  如果我们熟悉二分查找,我们就知道二分查找有一个重要的基础,就是需要有序的顺序表。这里有两点,一个是有序,另一个是顺序表。一般来说,只要是查找的题目,和这两者挂上钩,基本就是二分查找无疑了。因为二分查找过于重要,建议大家自己要能写出代码。

题目描述

  统计一个数字在一个排序数组中出现的次数。

题目分析

  如果说从前往后扫描一个数组,统计这个数字在数组中出现的次数,显然复杂度是 O ( n ) O(n) O(n)的,完全用不到排序数组这个特点。我们要想用上这个特点,在一个排序数组中一个数字出现多次的话,显然这写数字是挤在一处的,我们只需要找到第一次出现的位置,然后找到最后一次出现的位置,显然就可以轻松得到这个数字出现的次数。那就是在有序数组中找第一次出现的位置和最后一次出现的位置。不用说了,必然二分查找。
  但是我们知道普通的二分查找是找一个数字出现的位置,如果这个数字出现多次,二分查找只能返回其中一个的位置。而这个时候,我们就需要对代码进行修改,修改为可以保证只查找到该数的第一个数字或者最后一个数字。这个时候就完成了任务。但是这样可能就要写两个函数,一个找第一次出现的位置,一个找最后一次出现的位置。
  我们可以对这个问题稍微做一做变通,我们在学习有序表的插入时候,可以通过二分查找找到插入的位置,我们也可以对代码进行修改,保证相同的数插入在最后面或者最前面。我们以插在最前面为例。插在最前面的位置显然就是这个数的起始位置(如果存在),我们可以通过这个函数来转换一下找到这个数的最后位置。如果我们的数组是整数类型,那么显然这个数加1的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值