leetcode-数组-35-搜索插入位置

搜索插入位置

题目描述(难度:简单)

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

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

示例 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

解题思路

  • 暴力法:由于数组有序,从0开始遍历,找到一个小于或等于目标值的索引,直接返回该索引,适用于数量少
  • 二分法:由于数组有序,将数组用中间值分为大小区间;用目标值与中间值比较,如果大于该区间,则将中间值取为大区间的起点,重新计算中间值比较;最终当区间只有一个数的时候,比其大则返回其索引+1

代码

/**
 * 暴力法
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    for(let i = 0; i < nums.length; i++) {
          // 判断小于或等于当前,即返回当前位置索引
        if (target <= nums[i]) {
            return i;
        }
    }
    return nums.length;
};


/**
 * 二分法
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
      // 二分法递归
    return search(0, nums.length, nums, target);
};
/**
 * 递归
 */
function fn(arr,target){
    let left = 0, right =arr.length - 1;
    while(left<right){
        let mid = parseInt((left+right)/2);
        if(target === arr[mid]){
            return mid;
        }else if(target < arr[mid]){
            right = right -1;
        }else{
            left = left +1;
        }
    }
    return left;
}

   转载规则


《leetcode-数组-35-搜索插入位置》 朝飞 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
js数组去重方法(史上最全?) js数组去重方法(史上最全?)
下面介绍下对象数组去重和普通数组去重 普通数组去重第一种:利用ES6 Set去重 不考虑兼容性,这种去重的方法代码最少。这种方法还无法去掉“{}”空对象 let arr = [1,1,'true','true',true,true,15
2020-02-22
下一篇 
leetcode-数组-27-移除元素 leetcode-数组-27-移除元素
移除元素描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你
2020-02-20
  目录