打卡,第16天
失眠的感觉真难受。。。一天都想睡觉,但是却睡不着,sad。
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
在有序的数组中进行查找,显然第一个想到的就是二分查找啦,不过题目给的数组是多了一个限定条件,就是这个数组被rotated
了,所以,显然直接用二分查找是不行的。
观察4 5 6 7 0 1 2
,我们可以发现如果我们可以找到7
这个位置,我们就可以得到两个有序数组,可以进行二分查找,所以一个简单直观的想法就是:
但是这样的时间复杂度就是O(n)
了,显然不是我们想要的结果,我们可以对这个转折点进行一次二分查找:
这样的时间复杂度就是O(2*logn)
了。
完整代码:
不过显然这不是最优的方法啦,毕竟要O(2*logn)
,事实上只需要对二分查找进行修改,就可以直接运用了,恩,这是在dicuss
中看到的方法: