面试题 10.03. 搜索旋转数组
难度中等46
搜索旋转数组。给定一个排序后的数组,包含n个整数,但这个数组已被旋转过很多次了,次数不详。请编写代码找出数组中的某个元素,假设数组元素原先是按升序排列的。若有多个相同元素,返回索引值最小的一个。
示例1:
1 | 输入: arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 5 |
示例2:
1 | 输入:arr = [15, 16, 19, 20, 25, 1, 3, 4, 5, 7, 10, 14], target = 11 |
提示:
- arr 长度范围在[1, 1000000]之间
通过nums[l]
与nums[mid]
的比较来判断
- 如果
左值
小于中值
,那么说明左边是递增
的- 如果左值小于等于
target
并且target
小于等于中值
:r = mid
- 否则
l = mid+1
- 如果左值小于等于
- 如果
左值
大于中值
,那么说明右边是递增
的- 如果
左值小于等于target
或者target
小于等于中值
:r = mid
- 否则
l = mid +1
- 如果
- 如果
左值
等于中值
,那么说明有可能找到了目标- 如果左值不等于
target
,那么l++
- 如果左值等于
target
,那么r=l
- 如果左值不等于
1 | class Solution { |
数组的旋转就是循环移动,不管旋转多少次,一定是左边递增,中间断开,右边递增的
1 | class Solution { |
高效优雅的题解
1 | class Solution { |
参考文献
作者:armeria-program来源:力扣(LeetCode)著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。