首页 > 试题广场 >

二分查找-II

[编程题]二分查找-II
  • 热度指数:190921 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)长度为n的整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1

数据范围:
进阶:时间复杂度,空间复杂度
示例1

输入

[1,2,4,4,5],4

输出

2

说明

从左到右,查找到第1个为4的,下标为2,返回2    
示例2

输入

[1,2,4,4,5],3

输出

-1
示例3

输入

[1,1,1,1,1],1

输出

0
function search( nums ,  target ) {
    // write code here
    let index = -1;
    let low = 0;
    let hight = nums.length-1;
    while(hight >= low){
//这里要注意指针的要大于等于,因为有可能出现最后一个是要找的目标值
        let mid = low + Math.floor((hight - low)/2);
        if(nums[mid] == target){
            index = mid;
            hight = mid -1;
        }else if(nums[mid] < target){
            low = mid +1;
        }else{
            hight = mid-1;
        }
        
    }
    return index;
    
}
发表于 2021-09-17 14:05:42 回复(0)