文章目录
- 1.题目要求
- 2.代码
1.题目要求
- 要求
- 思路
2.代码
class solution
{
public:
int search(vector<int>& nums, int target)
{
int allnum = nums.size();
if (allnum == 0)
return -1;
if (allnum == 1)
return nums[allnum-1] == target ? 0 : -1;
int low = 0;
int high = allnum - 1;
while (low <= high)
{
int mid = (low + high)/2;
if (nums[mid] == target)
return mid;
//判断分割出来的mid哪个部分有序,根据有序的那个部分确定我们该如何改变二分查找的上下界
if (nums[mid] >= nums[0])
{
if (nums[0] <= target && target <= nums[mid])
high = mid - 1;
else
low = mid + 1;
}
else
{
if (nums[mid] < target && target <= nums[high])
low = mid + 1;
else
high = mid - 1;
}
}
return -1;
}
};