JS leetcode 搜索插入位置 题解分析
壹 ❀ 引
今天来做一道特别特别简单的题,来自leetcode35. 搜索插入位置,题目描述如下:
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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
我们来直接分析题目,给出解题思路:
贰 ❀ 解题思路
根据题目描述,我们已知数组为从小到大排列且无重复元素的有序序列,给定一个目标值,我们要找到第一个等于或大于它的元素的索引。
为什么是大于或等于呢,等于不用解释,比如第二个例子[1,3,5,6]给定2,最终返回1,其实本质等于找到了第一个大于2的元素3,让3往后靠靠,再把2插入进去,而2正是取代了原先3的位置。

当然,如果我们遍历了一遍都没找到符合的位置,则插入到数组的末尾,所以这里返回的就是数组的长度。
知道了思路,那实现起来就很简单了,比如:
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
for (var i = 0; i < nums.length; i++) {
// 大于等于目标值则返回索引
if (nums[i] >= target) {
return i
};
};
// 反之返回length
return nums.length;
};
当然,我最初想到的是find方法,由于长时间未用find有点陌生,导致我写了奇怪的代码:
// 这是错误的示例
var searchInsert = function (nums, target) {
var result = nums.find((item, index) => {
if (item >= target) {
return index;
};
});
return result ? result : nums.length;
};
这里我其实希望如果符合条件,就返回index给result,如果没找到result为undefined,所以利用这点来决定返回length或者是正确的index。
但事实上find方法的特性是如下:
- 当数组中的元素在测试条件时返回 true 时, find() 返回符合条件的元素,之后的值不会再调用执行函数。
- 如果没有符合条件的元素返回 undefined。
注意,是为 true 时 返回符合条件的元素,所以这里即使我们写了return index,也不会返回index,而是以index转为布尔值,来决定是否要返回当前item。所以上述的代码无法按照我们的预期找到想要的索引。
当然,按照上面的思路,我们应该使用findIndex而非find,findIndex与find相同,同样是根据返回的布尔值决定是否要返回当前索引,如果遍历完成未找到,则返回-1,正确的代码是这样:
/**
* @param {number[]} nums
* @param {number} target
* @return {number}
*/
var searchInsert = function (nums, target) {
var result = nums.findIndex((item) => {
return item >= target;
});
return result === -1 ? nums.length : result;
};
那么关于本题的分析就到这里了。
JS leetcode 搜索插入位置 题解分析的更多相关文章
- leetcode 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1,3,5,6], 5 输 ...
- leetcode笔记——35.搜索插入位置 - CrowFea
0.问题描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 12 输入: [1,3 ...
- Leetcode之二分法专题-35. 搜索插入位置(Search Insert Position)
Leetcode之二分法专题-35. 搜索插入位置(Search Insert Position) 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会 ...
- Java实现 LeetCode 35 搜索插入位置
35. 搜索插入位置 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引.如果目标值不存在于数组中,返回它将会被按顺序插入的位置. 你可以假设数组中无重复元素. 示例 1: 输入: [1, ...
- 每日一道 LeetCode (10):搜索插入位置
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- [leetcode] 35. 搜索插入位置(Java)(二分)
35. 搜索插入位置 二分,太简单,没啥好说的 class Solution { public int searchInsert(int[] nums, int target) { if (nums. ...
- 35、搜索插入位置 | 算法(leetode,附思维导图 + 全部解法)300题
零 标题:算法(leetode,附思维导图 + 全部解法)300题之(35)搜索插入位置 一 题目描述 二 解法总览(思维导图) 三 全部解法 1 方案1 1)代码: // 方案1 "无视要 ...
- Leecode刷题之旅-C语言/python-35.搜索插入位置
/* * @lc app=leetcode.cn id=35 lang=c * * [35] 搜索插入位置 * * https://leetcode-cn.com/problems/search-in ...
- LeetCode python实现题解(持续更新)
目录 LeetCode Python实现算法简介 0001 两数之和 0002 两数相加 0003 无重复字符的最长子串 0004 寻找两个有序数组的中位数 0005 最长回文子串 0006 Z字型变 ...
- 【转】第6篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:自动注册JS脚本+自动反射方法分析
作者: 牛A与牛C之间 时间: 2013-11-21 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第6篇:Xilium CefGlue 关于 CLR Object 与 JS ...
随机推荐
- 机器学习-无监督机器学习-LDA线性判别分析-25
目录 1. Linear Discriminant Analysis 线性判别分析 1. Linear Discriminant Analysis 线性判别分析 经常被用于分类问题的降维技术,相比于P ...
- go 变量逃逸分析
0. 前言 在 小白学标准库之 reflect 篇中介绍了反射的三大法则以及变量的逃逸分析.对于逃逸分析的介绍不多,大部分都是引自 Go 逃逸分析.不过后来看反射源码的过程中发现有一种情况 Go 逃逸 ...
- kafka 集群环境搭建
本文为博主原创,未经允许不得转载: 如果搭建单机节点 kafka 可看我的这篇博客: 搭建 kafka 集群环境,只需要在搭建单机 kafka 环境的基础上,多增加几个kafka 服务实例即可. 多增 ...
- pycharm等编辑器快捷键大赏
1.序论 平时打代码的时候用鼠标在写代码的时候还行,代码一长就GG,快捷键便是我们的好选择 2.应用场景 1.问题一--选中一段指定区域 我想选中一段区域(我们一般用鼠标拖动),或者某一个标识符(光标 ...
- AI伴侣下载
总结 现在网页上很多下载的AI伴侣下载下来都会有些问题或者不能用,如下链接下载的AI伴侣亲测可以使用! (连接后会提示更新,博主没有选择更新,如有需要也可以更新) https://mit-ai2-co ...
- SpringBoot3集成Zookeeper
标签:Zookeeper3.8 ,Curator5.5: 一.简介 ZooKeeper是一个集中的服务,用于维护配置信息.命名.提供分布式同步.提供组服务.分布式应用程序以某种形式使用所有这些类型的服 ...
- Redis异常问题分析黄金一分钟
Redis异常问题分析黄金一分钟 背景 同事发现一个环境redis比较卡顿,导致业务比较难以开展. 问题是下午出现的. 六点左右找到我这边. 想着帮忙看看, 问题其实没有定位完全, 仅是发现了一个可能 ...
- [转帖]SQL SERVER中隐式转换的一些细节浅析
https://www.cnblogs.com/kerrycode/p/5853257.html 其实这是一篇没有技术含量的文章,精通SQL优化的请绕道.这个缘起于在优化一个SQL过程中,同事问了我一 ...
- 有趣的Shell脚本学习
有趣的Shell脚本学习 倒计时脚本 #!/bin/bash echo 20秒倒计时开始: tput sc # 循环40秒 for count in `seq 0 20` do tput rc tpu ...
- [转帖]Linux下在文件内部指定行(首行、末尾行等)插入内容
https://blog.csdn.net/drbing/article/details/52153766 1.在文件的首行插入指定内容: :~$ sed -i "1i#! /bin/sh ...