35. 搜索插入位置

题目

https://leetcode-cn.com/problems/search-insert-position/

思路

最基础的二分法,有一个亮点就是思考怎么找到被插入的数字的位置

1. 注意js的除法是会自动计算出小数的,所以计算mid的时候要注意写成是Math.floor( )

2. 当数字不存在时,插入的位置就是lower的位置。

   因为在最后一次循环的时候,一定有lower = upper = mid;

   然后,假如插入的数比这个位置的数大,那么就会有lower = mid + 1;

   假如插入的数比这个位置的数小,那么这个位置正好是它应该被插入的地方

3. lower <= upper的话,搜索区间是[lower, upper]

     lower < upper的话,搜索区间是[lower, upper)

代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
	let lower = 0;
	let upper = nums.length - 1;
	let mid = 0;

	while (lower <= upper){
		mid = lower + Math.floor((upper - lower)/2);
		if (nums[mid] === target){
			return mid;
		}
		else if (nums[mid] < target){
			lower = mid + 1;
		}
		else{
			upper = mid - 1;
		}
	}
	return lower;//如果都没找到的话,插入的位置应该就是lower的位置
};

代码v2

如果条件换成了left < right该怎么写代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    let left = 0;
    let right = nums.length - 1;
    let mid;
    while(left < right){
        mid = left + Math.floor((right - left)/2);
        if(nums[mid] === target) return mid;
        else if(nums[mid] < target) left = mid + 1;
        else right = mid - 1;
    }
    // 这里要对left所指的数作出判断,因为left = right停止的时候并不知道这个位置的大小情况
    //所以要检查这个位置
    if(nums[left]>=target) return left;
    else return left + 1;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值