xiannv / xiannv.github.io

blog
0 stars 0 forks source link

【leecode】JavaScript 35. 搜索插入位置 - 简单 #79

Open xiannv opened 4 years ago

xiannv commented 4 years ago

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 1:

输入: [1,3,5,6], 5 输出: 2 示例 2:

输入: [1,3,5,6], 2 输出: 1 示例 3:

输入: [1,3,5,6], 7 输出: 4 示例 4:

输入: [1,3,5,6], 0 输出: 0

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/search-insert-position 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

xiannv commented 4 years ago
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    if (nums[0] > target) {
        return 0;
    } else if (nums[nums.length - 1] < target) {
        return nums.length;
    }
    for(var i=0;i<nums.length;i++){
        if(nums[i]>target || nums[i]==target){
            return i;
        }
    }
    return nums.length
};
//二分法
var searchInsert = function(nums,target){
     const length = nums.length;
  if (nums[length - 1] < target) {
    return length;
  } else if (length === 0) {
    return 0;
  }
  let left = 0;
  right = length - 1;
  while (left < right) {
    let mid = (left + right) >>> 1;
    if (target > nums[mid]) {
      left = mid + 1;
    } else {
      right = mid;
    }
  }
  return right;
    //原先的(left + right) / 2,如果left和right都很大的情况下,加和可能超过最大安全数,导致结果不精确。
    //当然可以改成left + (right - left) / 2,不过如果right很大,而left很小,也会溢出。
    //用>>>,不怕溢出,简单快捷,就是可读性差了点。
}