一、题目
给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1。
样例
样例 1:
输入:[1,4,4,5,7,7,8,9,9,10],1
输出: 0
样例解释:
第一次出现在第0个位置。
样例 2:
输入: [1, 2, 3, 3, 4, 5, 10],3
输出: 2
样例解释:
第一次出现在第2个位置
样例 3:
输入: [1, 2, 3, 3, 4, 5, 10],6
输出: -1
样例解释:
没有出现过6, 返回-1
二、思路:
1、先将数组对分,判断所查找的值在数组的哪一边
2、找出查找的值在哪一边后,再次进行对分
3、最后返回
三、js代码
const binarySearch = function (nums, target) {
// write your code here
var left=0;
var right=nums.length-1;
while (left<=right){
var mid=Math.floor((right+left)/2); //对分数组,向下取整
if (target==nums[mid]) { //如果值相等,继续向左遍历
right=mid-1;
}else if (target>nums[mid]){ //如果值大于中间值,则向右遍历
left=mid+1;
} else{ //否则向左遍历
right=mid-1;
}
}
if(target==nums[left]){
return left;
}
else{
return -1;
}
}