/****
* 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
*
* 示例 1:
* 输入: nums = [-1,0,3,5,9,12], target = 9
* 输出: 4
* 解释: 9 出现在 nums 中并且下标为 4
* 示例 2:
* 输入: nums = [-1,0,3,5,9,12], target = 2
* 输出: -1
* 解释: 2 不存在 nums 中因此返回 -1
*
* 提示:
* 你可以假设 nums 中的所有元素是不重复的。
* n 将在 [1, 10000]之间。
* nums 的每个元素都将在 [-9999, 9999]之间。
*
*
* 解题思路:
* 1.二分查找的思路,找中间值与target值比较,不断缩小查找区间
*/
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var search = function(nums, target) {
var n=nums.length,left=0,right=n-1,mid;
while(left<=right){
// mid = Math.floor((left+right)/2);
// left+(right-left)/2 相对(left+right)/2的好处是可以防止left\right足够大时,相加溢出。
mid = Math.floor(left+(right-left)/2);
if(nums[mid] > target){
right = mid -1;
}else if(nums[mid]<target){
left = mid + 1;
}else if(nums[mid]==target){
return mid;
}
}
return -1;
};
var nums = [-1,0,3,5,9,12], target = 9;
console.log(search(nums,target));
leetcode算法刷题记录之二分查找
最新推荐文章于 2021-08-15 00:11:37 发布