tailgo / poorguy-fly

1 stars 0 forks source link

35. 搜索插入位置 #26

Open AmelloAster opened 4 years ago

AmelloAster commented 4 years ago

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

解题代码

var searchInsert = function (nums, target) {
    let minT = target - 1;
    let maxT = target + 1;

    let mMid = 0;
    let aMid = 0;

    let mid = nums.findIndex(i => i === target);

    if (mid !== -1) {
        return mid;
    }

    mMid = nums.findIndex(i => i === minT);
    aMid = nums.findIndex(i => i === maxT);

    if (mMid !== -1 && aMid === -1) {
        return mMid + 1
    }

    if (aMid !== -1 && mMid === -1) {
        return aMid
    }

    if (aMid !== -1 && mMid !== -1) {
        return aMid
    }

    if (aMid === -1 && mMid === -1) {
        if (target < nums[0]) return 0
        if (target > nums[nums.length - 1]) return nums.length
    }
}

解题思路

1. 将 target 的值 -1 或者 +1
2. 在 nums 寻找 -1 或者 +1 之后是否在 nums 中存在这个数
3. 如果存在 则寻找是 -1 存在 还是 + 1存在 还是都存在 根据不同情况返回值
4. 如果都不存在则返回 target 是最左边还是最右边的数

解题效率

执行结果:
通过
显示详情
执行用时:
68 ms, 在所有 JavaScript 提交中击败了74.53%的用户
内存消耗:
37.7 MB, 在所有 JavaScript 提交中击败了8.70%
的用户
liujiangs commented 4 years ago

var searchInsert = function(nums, target) { return nums.findIndex((val, index) => { return val >= target }) >= 0 ? nums.findIndex((val, index) => { return val >= target }) : nums.length };

为啥用API效率比for循环慢