1. 题目
Search in Rotated Sorted Array
在旋转有序数组中查找特定值
数组中没有重复的数,查找特定值,若存在,返回其下标,若不存在,返回-1
如[10,12,1,2,6,8] 12 返回1
[10,12,1,2,6,8] 0 返回-1
2. 分析
数组中没有重复的数
若nums[start]<=nums[mid],则左半部分递增,先在左半部分搜索
若搜索不到,则往右半部分搜索
若nums[start]>nums[mid],则右半部分递增,先在右半部分搜索
若搜索不到,则往左半部分搜索
3. 代码
class Solution {
public:
int search(vector<int>& nums, int target) {
const int len = nums.size();
if(len <= 0)
return -1;
int left = 0;
int right = len - 1;
while(left <= right)
{
int mid = left + ((right - left) >> 1);
if(target == nums[mid])
return mid;
if(nums[left] <= nums[mid])
{
if(nums[left] <= target && target < nums[mid])
right = mid - 1;
else
left = mid + 1;
}
else
{
if(nums[mid] < target && target <= nums[right])
left = mid + 1;
else
right = mid - 1;
}
}
return -1;
}
};