129 - 33 搜索旋转排序数组
题目
假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。
搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。
你可以假设数组中不存在重复的元素。
你的算法时间复杂度必须是 O(log n) 级别。
示例 1:
输入: nums = [4,5,6,7,0,1,2], target = 0 输出: 4
示例 2:
输入: nums = [4,5,6,7,0,1,2], target = 3 输出: -1
解答
怎么感觉可以直接用自带的api。。
或者排序一下两分搜索
Runtime: 52 ms, faster than 87.17% of JavaScript online submissions for Search in Rotated Sorted Array.
Memory Usage: 33.9 MB, less than 30.77% of JavaScript online submissions for Search in Rotated Sorted Array.
自带api,效果还不错吼
看了题解,不用排序的,用两次两分法查找就行了
就,找其中排序了的部分
如果
nums[0] <= nums[mid]
,说明0 - mid不包含旋转,有序。如果target还在这个区间里面,那么只需在里面查找
如果
nums[mid] < nums[0]
,说明0-mid包含旋转如果target小于mid,说明目标在旋转位置到mid之间
如果target大于0,说明在0到旋转位置之间
Runtime: 60 ms, faster than 44.56% of JavaScript online submissions for Search in Rotated Sorted Array.
Memory Usage: 34.1 MB, less than 7.69% of JavaScript online submissions for Search in Rotated Sorted Array.
不过while出来的left和right始终是保持相等的。。不用做题解中的判断
Runtime: 48 ms, faster than 79.30% of Python3 online submissions for Search in Rotated Sorted Array.
Memory Usage: 13.9 MB, less than 6.29% of Python3 online submissions for Search in Rotated Sorted Array.
Runtime: 0 ms, faster than 100.00% of Go online submissions for Search in Rotated Sorted Array.
Memory Usage: 2.6 MB, less than 50.00% of Go online submissions for Search in Rotated Sorted Array.
Last updated
Was this helpful?