二分查找

第一种写法:target是在一个左闭右闭区间[left,right]

int search(int* nums, int numsSize, int target)
{
    int left = 0;
    int right = numsSize - 1; // 定义target在左闭右闭的区间[left, right]
    while (left <= right) {
        int mid = left + ((right - left) / 2);
        if (nums[mid] > target) {
            right = mid - 1;
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else {
            return mid;
        }
    }
    return -1;
}
 
第二种写法:target是在一个左闭右开区间[left,right)
int search(int* nums, int numsSize, int target)
{
    int left = 0;
    int right = numsSize; // 定义target在左闭右开的区间[left, right)
    while (left < right) {
        int mid = left + ((right - left) / 2);
        if (nums[mid] > target) {
            right = mid; // target在左区间,在[left, middle)中
        } else if (nums[mid] < target) {
            left = mid + 1;
        } else {
            return mid;
        }
    }
    return -1;
}
posted @ 2021-12-07 11:18  bwinLv  阅读(12)  评论(0编辑  收藏  举报