这道题多了一项就是如果有重复的,可能[l,r]都是重复的,那就需要l++;
其他的就是判断[l,r]是否处于有序的数组里面,是的话就跳进去,不是的话就跳到有序数组外面的那段去二分。
class Solution {
public:
bool search(vector<int>& nums, int target) {
int l = 0,r = nums.size()-1;
while(l<=r)
{
int m = l + (r-l)/2;
if(target == nums[m])
{
return 1;
}
else if(nums[m] == nums[l])
{
l++;
continue;
}
else if(nums[m] > nums[l])
{
if(target >= nums[l] && target < nums[m])
{
r = m-1;
}
else
{
l = m+1;
}
}
else
{
if(target > nums[m] && target <=nums[r])
{
l = m+1;
}
else
{
r = m-1;
}
}
}
return 0;
}
};