一、查找最简单的思路就是顺序查找,但是那样效率太低,提高一点,用双指针的方法
class Solution {
public:
int search(vector<int>& nums, int target) {
int low=0,high=nums.size()-1;
while(low<=high)
{
if(nums[low]==target)
return low;
if(nums[high]==target)
return high;
low++;
high--;
}
return -1;
}
};
二、上述方式没有很好地利用已经排序的条件。因此参考折半查找,同时注意检查分出的两个部分是否单调递增的,判断目标值是否落在这一单调区间内(关注边界的情况)
class Solution {
public:
int search(vector<int>& nums, int target) {
int low=0,high=nums.size()-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(nums[mid]==target)
return mid;
if(nums[low]<=nums[mid])
{
if(target<nums[mid] && nums[low]<=target)
high=mid-1;
else
low=mid+1;
}
if(nums[mid]<=nums[high])
{
if(target>nums[mid] && nums[high]>=target)
low=mid+1;
else
high=mid-1;
}
}
return -1;
}
};