欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

简单算法 二分查找-II(java)

程序员文章站 2023-12-21 21:00:34
...

简单算法 二分查找-II(java)
描述
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1
示例1
输入:
[1,2,4,4,5],4
返回值:
2
说明:
从左到右,查找到第1个为4的,下标为2,返回2
想法:利用二分查找,不过因为其条件是写一个函数搜索 nums 中的第一个出现的target,所以有两种方法,一种是不管中间判断,当nums[mid] == target 时就把mid赋给right,这个时候right就是我们需要返回的值,并且因为循环还在继续,所以当又有nums[mid] == target 时就把mid赋给right,这样一次循环下来right就是第一个出现的target。第二种方法就是判断target == nums[mid],因为是有序的然后通过while循环逐渐找到第一个target

 while(mid!=0 && target == nums[mid-1]){
                    mid--;
                }
                return mid;

public int search (int[] nums, int target) {
        int left = 0 ;
        int right = nums.length - 1;
        if(right == -1) return -1;
        int mid;
        while(left < right){
            mid = (left + right) / 2;
            if(nums[mid] >= target){
                right = mid;
            }else{
                left = mid + 1;
            }
        }
        if(nums[right] == target) return right;
        return -1;
    }

上一篇:

下一篇: