LeetCode刷题-33.搜索旋转排序数组
题目链接:33.搜索旋转排序数组
¶题解:
开始进入二分的时代,二分模板要掌握并理解。
¶题目简述:
一个升序序列在某一点反转形成两个升序序列,从其中找到一个目标值,不存在返回 -1,要求时间复杂度为O(log n)级别。
¶题解:
自然而然的想到要使用二分了!
二分的二段性:一段满足,另一段不满足,则可以将分界点二分出来!
二分可以找到满足条件的最后一个数!最后(指的是按照区间缩小的趋势最后满足条件的数)
注意:关于mid
加不加一的问题,若 l= mid
就得加,否则只有两数会造成死循环;若r = mid
就不能加,否则只有两数也会造成死循环。
‘
本题分为了两段,根据二分的二段性,当 x >= nums[0]
的时候,会发现左边一段都符合条件,右边一段都不符合条件,可以使用二分,二分到分界点。
如下图:
找到分界点后,判断当前目标值在哪一段,继续进行二分即可!
0 ~ mid
mid + 1 ~ nums.size() - 1
¶AC代码:
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小牛博客!
评论