leetcode: 二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

来源:力扣(LeetCode)

class Solution {
public:
    int search(vector<int> &nums, int target) {
        int  R= nums.size()-1;
        int  L = 0;
     while(L<=R){//此时搜索区间为闭区间
         int mid = (L+R)/2;
         if(target==nums[mid])
             return mid;
         else if(target>nums[mid])
             L= mid+1;
         else if(target<nums[mid])
             R=mid-1;
     }
     return -1;
    }
};

二分查找时,一般涉及到两种区间,一种是左闭右闭[L,R],一种是左闭右开[L,R)

左闭右闭[L,R]:

此时的判断条件为L<=R,每次搜索的区间都是[L,R]

初始化R的值为nums.size()-1,while(L<=R)的终止条件为 L>R,即L==R+1

写成区间形式就是[R+1,R],此时区间为空

左闭右开[L,R):

此时的判断条件为L<R,每次搜索的区间都是[L,R)

初始化R的值为nums.size(),while(L<R)的终止条件为L==R

写成区间形式就是[R,R),此时区间为空

猜你喜欢

转载自blog.csdn.net/L5494326/article/details/128462619