33、Search in Rotated Sorted Array
搜索旋轉排序數組
假設有一個排序的按未知的旋轉軸旋轉的數組(比如,0 1 2 4 5 6 7 可能成爲4 5 6 7 0 1 2)。給定一個目標值進行搜索,如果在數組中找到目標值返回數組中的索引位置,否則返回-1。
你可以假設數組中不存在重複的元素。
樣例給出[4, 5, 1, 2, 3]和target=1,返回 2
給出[4, 5, 1, 2, 3]和target=0,返回 -1
分析:
找出旋轉點,然後二分查找。
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size()<1)return -1;
int lo=0,hi=nums.size()-1;
if(nums[lo]>nums[hi])
{
for(int i=0;i<nums.size()-1;i++)
if(nums[i]>nums[i+1])
if(target>nums[hi])hi=i;
else if(target<nums[lo])lo=i+1;
}
while(lo<=hi)
{
int mid=lo+(hi-lo)/2;
if(nums[mid]==target)return mid;
else if(nums[mid]>target)hi=mid-1;
else lo=mid+1;
}
return -1;
}
};