【LeetCode】704. 二分查找

题目:704. 二分查找


解题思路

  • 思路:给定一个 nums 数组,注意数组是升序排列的;那么,找到当前 target 元素是否存在于数组之中,可采用二分法查找
  • 注意:此处定义该数组区间定义:【左闭右闭】/【左闭右开】
  • 使用left指向数组头,right 指针指向数组尾, mid 用于计算二分查找的位置,mid=left+(right-left)/2,避免由于 left 和 right 过大导致计算结果溢出的现象
  • 如果当前 nums[mid] 比 target 大,那么就往左边找;反之,则向右边找;如果相等,说明找到了,返回当前的 mid 值即可
  • 结束条件,当前的 left 移动到了 right 的右边,则说明两指针之间已不存在元素,则返回-1即可

C++代码实现

int search(int* nums, int numsSize, int target){
    int left=0,right=numsSize-1; //左右指针,分别指向数组头和尾
    // 左指针在右指针左边,或指向同一位置时进行循环
    while(left <= right){
        int mid = (left+right+1)/2;
        if(nums[mid] < target){
            left = mid + 1;
        }else if(nums[mid] > target){
            right = mid - 1;
        } else {
            return mid;
        }
    }
    return -1;  //未查询到返回-1
}

Java代码实现

解法一:假设该区间为【左闭右闭】

class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length - 1;

        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;
    }
}

解法二:假设该区间为【左闭右开】

class Solution {
    public int search(int[] nums, int target) {
        //定义数组元素为左闭右开的区间,即不包括右边元素
        int left = 0, right = nums.length;
        while(left<right) {
            int mid = left + (right-left)/2;
            // System.out.printf("%d", mid);
            if(nums[mid] < target) {
                left = mid + 1;
            } else if(nums[mid] > target) {
                // 此时,因为该区间是左闭右开区间,不包括右元素,则将right值设置为mid
                right = mid;
            } else {
                return mid;
            }
        }
        return -1;
    }
}

参考资料:704. 二分查找

posted @   是你亦然  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示