Sword 11

https://leetcode-cn.com/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/

直接搜索是 O(n), 所以我们用二分来求解

首先考虑一下为什么能二分,二分的原理就是每次根据中间的值都可以舍弃一半的解(也就是说解必然存在于另一半当中)

而能够舍弃的前提就是原题有一定的规律,就比如说本题,如果numbers[mid] < numbers[j],证明mid 右边(不含 mid)都肯定不是解,于是令 j=mid,

将结果放在 i ~ mid(左闭右闭区间)即可,>是对称的,只不过结果放在 mid+1 ~ j

最后一种情况 numbers[mid] == numbers[j],我们没办法舍弃,因为左右都有可能,这个时候 j -- 令问题规模缩小即可,

这个会导致本题最差情况是 O(n)

 

posted on 2021-03-04 10:02  FriskyPuppy  阅读(41)  评论(0编辑  收藏  举报

导航