您的位置:首页 > 编程语言 > C语言/C++

leetcode_c++:Search in Rotated Sorted Array(033)

2016-05-17 22:59 603 查看

题目

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. 右半部分有序,目标值落在有序区间里,那么移动做指针,抛弃左指针;如果目标值不在有序区间,抛弃右半部分,移动有指针

复杂度

o(lgn)

class Solution{
public:
int search(vector<int> &nums,int target){
int left=0,right=nums.size();
while(left!=right){
int mid = left+(right-left)/2;

if(nums[mid]==target)
return mid;

if(nums[mid]>=nums[left]){
//[left~right] is unrotated sorted
if(nums[left]<=target && target <nums[mid])
right=mid;
else
left=mid+1;
}else{
if(nums[mid]<target && target <=nums[right-1])
left=mid+1;
else
right=mid;
}

}
return  -1;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: