浅谈二分法

二分法最早联想到为在有序数组中寻找想要的某个数。

但前提的数组一定要为有序,这样才能排除一半。巧妙地运用的问题的特殊性,和条件的特殊性。

此问题若要使用暴力的做法为遍历整个数组来寻找,时间复杂度为O(n)的。

但使用二分法后其时间复杂度就优化到了O(log2(n)),速度被大大的优化了。

但不一定是要有序才可以使用二分法,这是很多人的误区。如上所说,一些问题只要抓住了问题的特殊性和条件的特殊性就可以使用二分法。如寻找数组中的局部最小值(相邻的数大小不一)。

何为局部最小值。int arr[N]。

特别地if arr[0]<arr[1],可以称arr[0]为局部最小值。同理,if arr[n-1]<arr[n-2],可以称arr[n-1]为局部最小值。

一般地,arr[i]<arr[i+1] and arr[i]<arr[i-1]。则arr[i]就为局部最小值。局部最小值相当于一个数组中谷底的位置。可以想象数组为一条折线,但mid值不满足成为局部最小值条件的时候就可以减半范围。

如if arr[mid]>arr[mid-1] 或 arr[mid]>arr[mid+1]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值