35. 搜索插入位置|刷题打卡

137 阅读1分钟

掘金团队号上线,助你 Offer 临门! 点击 查看详情

一、题目描述:

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

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

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

 

二、思路分析:

  • 比较数组中的元素是否小于目标值,小于了直接返回数组长度,否则返回大于或等于目标值的索引
  • 还有一种二分查找

三、AC 代码


/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    for(let i = 0; i < nums.length;i++){
        if(nums[i] >= target){
            return i;
        }
    }
    return nums.length;
};
状态:通过
执行用时: 80 ms
内存消耗: 38.7 MB

四、总结

  • 当然不止一种方法,也看到很多方法实现,官方用了二分查找 思路与算法;
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    let n = nums.length;
    let left = 0, right = n - 1, ans = n;
    while (left <= right) {
        let mid = ((right - left) >> 1) + left;
        if (target <= nums[mid]) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return ans;

};

执行用时:64 ms
内存消耗:38.6 MB

  • 时间上来看,二分查找相对来说会更好一些

仅供学习参考

参考题目