題目描述:
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),又是搜索,又是有序數列,所以自然而然是二分嘍。
靜心盡力!