题目描述:在旋转数组中确定一个数的位置
解题思路:二分法解题
- 如果 nums[mid] == target,则返回 mid;
- 如果 nums[mid] >= nums[i],说明左半边有序;
- 否则,说明右半边有序
class Solution {
public:
int search(vector<int>& nums, int target)
{
//既然要求时间复杂度,只能用二分思想
int n = nums.size();
if(n == 0)
return -1;
int i = 0;
int j = n - 1;
while(i <= j)
{
int mid = (i + j) / 2;
if(nums[mid] == target)
{
return mid;
break;
}
//如果左半边有序
else if(nums[mid] >= nums[i])
{
if(nums[i] <= target && target < nums[mid])
j = mid - 1;
else
i = mid + 1;
}
//如果右半边有序
else
{
if(nums[mid] < target && target <= nums[j])
i = mid + 1;
else
j = mid - 1;
}
}
return -1;
}
};