题目描述:
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.
Your algorithm's runtime complexity must be in the order of O(log n).
Example 1:
Input: nums = [4,5,6,7,0,1,2], target = 0 Output: 4
代码:
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(nums[mid] == target) return mid;
else if(nums[mid] > target){
if(target > nums[nums.size() - 1] || nums[nums.size() - 1] > nums[0]) r = mid - 1; //target在左边
else{ //target在右边
if(nums[mid] < nums[0]) r = mid - 1; //mid在右边
else l = mid + 1; //mid在左边
}
}
else if(nums[mid] < target){
if(target <= nums[nums.size() - 1] || nums[nums.size() - 1] > nums[0]) l = mid + 1; //target在右边
else{ //target在左边
if(nums[mid] < nums[0]) r = mid - 1; //mid在右边
else l = mid + 1; //mid在左边
}
}
}
return -1;
}
};
两次AC,本题是一个medium题目,中规中矩,由于要求时间复杂度为O(log n),又是搜索,又是有序数列,所以自然而然是二分喽。
静心尽力!