标签:
Suppose a sorted array 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.
/*
旋转数组只能有三种情况:
1. 左半部分和有半部分都是按顺序的。旋转主元恰好是中间的数字。
2. 只有左半部分是按顺序的。旋转主元在左半部分。
3. 只有右半部分是按顺序的。旋转主元在右半部分。
所以至少有一半是按顺序的,可以用排除法确定每一次二分查找的
上界和下界。
1. 左半部分是按顺序
2. 左半部分不是按顺序的,那么右半部分肯定是按顺序的
不断缩小范围。
*/
class Solution {
public:
int search(vector<int>& nums, int target) {
int res=-1;
int l=0;
int r=nums.size()-1;
int mid=0;
while(l<=r)
{
int mid=l+(r-l)/2;
if(nums[mid]==target)
return mid;
else if(nums[l]<nums[mid]) //mid左边是顺序
{
if(nums[l]<=target&&nums[mid-1]>=target)
r=mid-1;
else
l=mid+1;
}
else //mid右边是顺序
{
if(nums[mid+1]<=target&&nums[r]>=target)
l=mid+1;
else
r=mid-1;
}
}
if(nums[mid]==target)
return mid;
else
return -1;
}
};leetcode No33. Search in Rotated Sorted Array
标签:
原文地址:http://blog.csdn.net/u011391629/article/details/52095973