题目链接:leetcode.
思路:即使旋转后,也必定有一部分是有序的。使用二分法,若左半边有序(nums[mid] >= nums[0]),则判断target在不在有序的这半边,继续搜索;右半边有序同理。
/*
执行用时:0 ms, 在所有 C++ 提交中击败了100.00%的用户
内存消耗:10.8 MB, 在所有 C++ 提交中击败了62.12%的用户
*/
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.empty())
{
return -1;
}
int left = 0, right = nums.size() - 1;
while(left < right)
{
int mid = left + (right - left) / 2;
if(nums[mid] == target)
return mid;
//如果左边有序
if(nums[mid] >= nums[0])
{
if(target >= nums[left] && target < nums[mid])
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
else
{
//右边有序
if(target > nums[mid] && target <= nums[right])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
}
if(nums[left] == target)
return left;
return -1;
}
};
365

被折叠的 条评论
为什么被折叠?



