原文:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 - 每天一个JavaScript小知识@Js中文网 · 码农进阶题库

原文地址:https://www.javascriptc.com/interview-tips/zh_cn/javascript/array-append/

题目描述:

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

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

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

解题:

思路一:

  • 检测 nums 数组中是否已经存在target值,存在直接返回;
  • 否则进行插入target,进行排序,再取下标进行返回。
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function (nums, target) {
    let res = nums.indexOf(target);
    if (res < 0) {
        nums.push(target);
        nums.sort((a, b) => (a - b));
        return nums.indexOf(target);
    };
    return res;
};

思路二:

  • 不管target是否存在,直接合并去重,排序;
  • 再获取target 下标,进行返回。
//也可以一行解决
var searchInsert = function (nums, target) {
    return [...new Set(nums.concat(target))].sort((a, b) => (a - b)).findIndex((v) => (v == target));
};

扩展阅读: