题解 | #二分查找-I#

二分查找-I

https://www.nowcoder.com/practice/d3df40bd23594118b57554129cadf47b

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param nums int整型一维数组 
     * @param target int整型 
     * @return int整型
     */
    public int search (int[] nums, int target) {
        int left = 0, right = nums.length;
        if(right == 0)
            return -1;

        while(right >= left){
            int middle = (left + right) / 2;
            if(nums[middle] < target){
                left = middle + 1;
            }
            else if(nums[middle] > target){
                right = middle - 1;
            }
            else
                return middle;
        }
        return -1;
    }
}

全部评论
这里有个边界条件,就是当数组大小为0时 还有两个正常情况,找到与找不到,其中由于终止条件必须要判断left=right时,故直接取middle会陷入死循环。所以这里有个技巧,利用middle已经比较过这一特点,来给left取middle+1,right取middle-1,类似数学解法的技巧来避免死循环
点赞 回复 分享
发布于 2024-05-20 15:08 上海

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务