class Solution {
public:
bool search(vector<int>& nums, int target) {
int i = 0, j = nums.size()-1;
int m = i;
if(i < j && nums[i] == nums[j])
{
return SearchInOrder(nums, i, j, target);
}
while(i <= j)
{
m = (i+j)/2;
if(nums[m] == target || nums[i] == target)
return true;
if(m == i)
{
i++;
continue;
}
if(target > nums[i])
{
if(nums[m] >= nums[i] && target > nums[m])//注意等号的情况
i = m;
else
j = m;
}
else
{
if(nums[m] < nums[i] && target < nums[m])//这个时候两个条件都没有等号
j = m;
else
i = m;
}
}
return false;
}
bool SearchInOrder(vector<int>& nums, int s, int e, int t)
{
int m = s;
while(m <= e)
{
if(nums[m] == t)
return true;
m++;
}
return false;
}
};