用二分法求解局部最小值

题目描述

局部最小值定义:
最左边边界处,如果最左边的数小于左边第二个数,则最左边为局部最小值。
最右边边界处,如果最右边的数小于右边第二个数,则最右边为局部最小值。
中间处,如果一个数小于它两边的数,则这个数就是局部最小值。
说白了,就是二维坐标系中的任意一个最低点,都是局部最小值。
现在,有一个数组,相邻的两个数不相等,请求出一个数组中的一个局部最小值。

算法思路

1.首先,先观察最左边的第一个和第二个数,判断是否是局部最小值。
2.然后,再观察最右边第一个和第二个数,判断是否是局部最小值。
3.如果最左边和最右边有一个是局部最小值,则此题结束。
4.否则,说明一个什么问题?说明左边的曲线是向下递减的,右边的曲线也是向上递增的,对吧?那么,中间是必定有局部最小值的,这是在高数最大值最小值中有类似的定义,对吧?
5.然后,直接用二分法,选取中间的数,判断其是不是局部最小值?如果不是的话,观察他左右趋势,加入,它左边一个数比他小,说明什么?说明它左边是递增的,而此时最左边的递减的,通过上面分析4的判断,说明它左边存在局部最小值,然后,再其左边区间,再次二分法,直到找到局部最小值。

总结

这题代码其实就是二分查找,就不放了。关键是此题的思路,这是重点,此题说明了,二分查找并不一定只能求解有序数组中的某个数。在一些能够直接排除掉一半区间的例子中,也同样可以使用二分法来解决,将时间复杂度直接降低到O(logn)。
就比如此题,可以根据一个区间两边的递增递减性,来判断区间内是否有局部最小值,那么,就可以直接用二分法从中间划分,然后根据判断条件,可以直接排除掉一半区间。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值