一天一大 leet(搜索插入位置)难度:简单-Day20200717

时间:2022-07-25
本文章向大家介绍一天一大 leet(搜索插入位置)难度:简单-Day20200717,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目:

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

示例:

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

抛砖引玉

  • 这样太简单了吧直接循环相等的就返回索引
  • 小于就记录索引+1
  • 大于就直接终止循环

撸起

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var isBipartite = function (graph) {
  let _result = 0
  nums.some(function (val, index) {
    if (val === target) {
      _result = index
    } else if (val <= target) {
      _result = index + 1
    } else {
      return true
    }
  })
  return _result
}

这个 时间 13.3% ,内存 8.7%是什么意思


优化

使用二分法查找优化下查找的逻辑

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function (nums, target) {
  let len = nums.length,
    _result = len,
    left = 0,
    right = len - 1
  while (left <= right) {
    let index = parseInt((right - left) / 2, 10) + left
    if (target <= nums[index]) {
      _result = index
      right = index - 1
    } else {
      left = index + 1
    }
  }
  return _result
}

优化了时间 那空间呢,减少下中间的变量,遇到结果就直接返回

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function (nums, target) {
  let left = 0,
    right = nums.length - 1,
    index = 0
  while (left <= right) {
    index = parseInt((right - left) / 2, 10) + left
    if (nums[index] === target) return index
    if (left === right) return nums[index] > target ? index : index + 1
    if (target > nums[index]) left = index + 1
    else right = index
  }
}