LeetCode题解:35.搜索插入位置

搜索插入位置(easy)

更好的阅读体验应该是:

  1. 审题-思考
  2. 答题
  3. 整理-归纳

一、题目

LeetCode题目链接:35.搜索插入的位置

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

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

示例 1:

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

示例 2:

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

二、题解

分析题干

分析题目很重要,每次阅读题目都要感谢当年做的那么多阅读理解,本题中,我们得知:

  1. 数组是排过序的数组
  2. 无重复元素

题解一(暴力法)

提到暴力法,就是频繁的使用遍历,且没有所谓的“套路”,从上倒下透漏出的都是实在!

时间复杂度:O(n)
空间复杂度:O(1)

思路

  • 找到第一比 target 大的元素,它的下标,就是要答案。

实现

var searchInsert = function(nums, target) {
  const len = nums.length;
  for (let i = 0; i < len; i++) {
    if (nums[i] >= target) {
      return i;
    }
  }
  return len;
};

题解二(二分法)

在一个排序的数组查找,我们可以使用二分法

我们的目的是:查找一个下标index,我们要找的nums[index] <= target的第一个值。

如果找不到,就返回数组的长度

时间复杂度:O(log(n))
空间复杂度:O(1)

var searchInsert = function(nums, target) {
  const len = nums.length;
  let left = 0; //左边界
  let right = len - 1; // 右边界
  let ans = len; // 返回值,注意如果目标不在数组中,返回数组的长度
  while (left <= right) {
    mid = ((right - left) >> 1) + left;
    if (target <= nums[mid]) {
      // 证明左边界在数组内部
      ans = mid; // 更新返回值
      right = mid - 1;
    } else {
      left = mid + 1;
    }
  }
  return ans;
};

三、写在最后

这是二分法解题的第一片文章,二分法具体是做什么的,以及其他应用场景我会在新的单章里发出,共勉

关于我

  • 花名:余光
  • WX:j565017805
  • 沉迷JS,水平有限,虚心学习中

其他沉淀

如果您看到了最后,不妨来个三连吧,这就是对我最大的鼓励!

相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页