旋转数组搜索,其中元素唯一
由于时间复杂度
O
(
log
n
)
O(\log n)
O(logn),所以肯定是二分
类似之前旋转数组找最小
我们可以考虑只在有序的部分里寻找
如果
n
u
m
s
[
l
]
≤
n
u
m
s
[
m
i
d
]
nums[l] \le nums[mid]
nums[l]≤nums[mid],这说明左边是有序的
如果
n
u
m
s
[
l
]
≤
t
a
r
g
e
t
<
n
u
m
s
[
m
i
d
]
nums[l] \le target < nums[mid]
nums[l]≤target<nums[mid],那说明target就在这里面,否则只能在右半边
class Solution {
public:
int search(vector<int>& nums, int target) {
int l=0,r=nums.size()-1;
while(l<=r){
int mid=(l+r)/2;
if(target==nums[mid])return mid;
if(nums[l]<=nums[mid]){
if(nums[l]<=target&&target<nums[mid]){
r=mid-1;
}
else{
l=mid+1;
}
}
else{
if(nums[mid]<target&&target<=nums[r]){
l=mid+1;
}
else{
r=mid-1;
}
}
}
return -1;
}
};