这道题让在旋转数组中搜索一个给定值,若存在返回坐标,若不存在返回-1。
采用二分搜素,找到nums[mid]位置,如果nums[mid]>nums[left],说明left到mid是有序的,那么看target是否在left到mid这一段,在的话right = mid - 1,不在的话left = mid + 1。如果mid到right部分是有序的,那么看target是否在mid到right这一段,在的话left = mid + 1,不在的话right = mid - 1;
class Solution {
public:
int search(vector<int>& nums, int target) {
int left = 0, right = nums.size()-1;
while(left <= right)
{
int mid = left + (right - left) / 2;
if(nums[mid] == target) return mid;
if(nums[mid] > nums[left])
{
if(target >= nums[left] && target <= nums[mid])
right = mid - 1;
else
left = mid + 1;
}
else if(nums[mid] < nums[left])
{
if(target >= nums[mid] && target <= nums[right])
left = mid + 1;
else
right = mid - 1;
}
else
left++;
}
return -1;
}
};