1.暴力法
class Solution {
public:
bool search(vector<int>& nums, int target) {
for(int i=0;i<nums.size();i++)
if(nums[i]==target)
return true;
return false;
}
};
2.二分法
二分法主要考虑的是如何去重
首先判断哪一边是有序的,然后对于nums[mid]=nums[right],令right--即可
代码如下:
class Solution {
public:
bool search(vector<int>& nums, int target) {
return search(nums,0,nums.size()-1,target);
}
bool search(vector<int> &nums,int left,int right,int target)
{
if(left<=right)
{
int mid=left+(right-left)/2;
if(nums[mid]==target)
return true;
else if(nums[mid]<nums[right])//右边有序
{
if(nums[mid]<target&&target<=nums[right])
return search(nums,mid+1,right,target);
else
return search(nums,left,mid-1,target);
}
else if(nums[mid]>nums[right])//左边有序
{
if(nums[left]<=target&&target<nums[mid])
return search(nums,left,mid-1,target);
else
return search(nums,mid+1,right,target);
}
else if(nums[mid]==nums[right]) //不确定哪边有序,但取掉nums[right]不影响结果,因为前面还有相等的nums[mid]
return search(nums,left,right-1,target);
}
return false;;
}
};