LeetCode 033 Search in Rotated Sorted Array

题目:一个有序数组,把它左移几位,末尾的数转移到开头。依次作为输入:
例如
1 2 3 4 5 6 7
变成
4 5 6 7 1 2 3

要求在其中搜索查找target,返回其位置,如果找不到,返回-1。

思路一:
先用二分查找找原有序数组的开头被弄到哪,即最小的数位置。
查找时,如果mid>=数组开头,说明最小数在右半边,否则在左半边。
然后再用二分查找找target,查找时把下标加上最小数的位置并对数组大小取模。
这是一个最直接的想法,C++实现后在LeetCode上运行时间7ms。

思路二:
不需要用两次二分查找,直接找target:
由于二分后数组中必然有一半是有序的,所以二分查找时要分情况讨论:
如果mid>=left,说明左半部分是有序的。判断是否有left<=target<=mid,是的话target在左半边,否则在右半边。
如果mid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值