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.
Subscribe to see which companies asked this question
思路分析:
此时为乱序的情况
class Solution {
public:
int se(int st, int ed, int target, vector<int>& nums)
{
if (st > ed)
{
return -1;
}
else
{
int mid = st + (ed - st)/2;
if (nums[mid] == target)
{
return mid;
}
if (nums[mid] >= nums[st])
{
if (target <= nums[mid] && target >= nums[st])
{
return se(st, mid - 1, target, nums);
}
else
{
return se(mid + 1, ed, target, nums);
}
}
if (nums[mid] < nums[st])
{
if (target <= nums[mid] || target >= nums[st])
{
return se(st,mid-1,target,nums);
}
else
{
return se(mid+1,ed,target,nums);
}
}
}
return -1;
}
int search(vector<int>& nums, int target)
{
if (nums.size() == 0)
{
return -1;
}
return se(0, nums.size() - 1, target, nums);
}
};