LeetCode今天面临的挑战是在数组中查找所有消失的数字。

蛮力

我们的输入包括一个缺少数字的实际数组。我们想将该数组与相同长度的数组进行比较,其中没有遗漏的数字。所以如果给定的话[4,3,2,7,8,2,3,1],我们想比较一下[1,2,3,4,5,6,7,8].

进行比较的一种方法是生成不丢失数字的数组。我们可以使用Array.keys(此处为MDN文档)来实现。

运作方式如下:

请注意,您可以使用.slice(index)返回以您作为参数传入的索引开头的所有元素。

在我们的代码中,我们可以像这样使用这些概念:

现在,我们可以使用JavaScript的.filter()来比较两者:

在第3行中,我们要求仅返回allNums中不包含在nums中的那些数字的返回值。

这种方法有效,但是它是非常慢。

将.indexOf()换成include并没有多大区别:

我们需要一种新方法!

在LeetCode上有一百万种解决方案—我一直在寻找一种对于像我这样的Noob而言高效且易于理解的解决方案。我通过LeetCode的Ashotovich1990找到了一个很棒的人。

首先最容易解释这个概念。然后,我们继续构建代码。这是他解决问题的方法:

Setup

设置一个正确长度的比较数组,其中所有值均为false。如果输入是[1,2,2],则比较数组将为[false, false, false]。

第一循环

循环遍历输入数组,像这样修改比较数组(稍后在下面解释)

input array:                               [  1  ,   2   ,   2   ]comparison array before loop:              [false, false , false ]comparison array after loop:               [ true , true , false ]

第二循环

循环浏览修改后的比较数组。找到时false,抓住它的索引并加1来确定缺失数字的值。

comparison array after loop:               [ true , true , false ]indices =>                                     0   ,   1  ,   2missing number = index of false + 1                           3

最后,将每个缺失的数字推入响应数组并返回响应。

建立我们的解决方案

首先,让我们建立一个名为的空数组missing。我们将使用它来收集丢失的数字。(Noobs:您经常会看到这个名为的数组res,它是。的缩写response。我更喜欢使用更多的语义名称)。

步骤1,设置比较数组

让我们使用JavaScript的.fill()设置比较数组。这是建立新阵列的方式。(您也可以使用它来覆盖现有数组的值。请参见MDN文档)。

在下面的代码中,我们将比较数组另存为seen。我们首先将所有值设置为false,以表明我们尚未从输入数组中“看到”任何数字。

步骤2,我们的第一个循环。将“看到”中的适当值更改为true。

let nums = [1,2,2] //seen = [false, false, false] for (let i = 0; i < nums.length; i++) {        seen[nums[i]-1] = true;    };

让我们打开包装。我们遍历输入数组,nums.我们检查每个数组的值nums[i],减去一个,然后将相同索引处的值更改seen为equaltrue.

如果这使您感到困惑,那么您并不孤单。使用以上输入,以下是seen每个循环后的演变:

let nums = [1,2,2]seen = [false, false, false]seen[nums[i]-1] = true;loop 1, i = 0:      seen[nums[0] - 1]  =>  nums[0] = 1  =>  seen[1 - 1]  =>  seen[0] = true seen => [true, false, false]loop 2, i = 1:      seen[nums[1] - 1]  =>  nums[1] = 2  =>  seen[2 - 1]  =>  seen[1] = trueseen => [true, true, false]loop 3, i = 3:      seen[nums[3] - 1]  =>  nums[2] = 2  =>  seen[2 - 1]  =>  seen[1] = trueseen => [true, true, false]

到目前为止,我们的代码:

步骤3.我们的第二个循环。

这是我们遍历的地方seen,寻找的值false。

1.  for (let i = 0; i < seen.length; i++) { 2.         if (!seen[i]){ 3.           missing.push(i+1); 4.   };

在第2行上,seen [i]是我们正在循环的当前项目。当我们写时if(!seen[i]),我们说的是,如果当前项的计算结果为false(继续第3行)。

在第3行,我们在索引号上加1以获取缺失号的值,然后将该数字推入缺失数组中。

这是最终代码。

它对内存不是很好,但是对速度却很好!

您可以在PythonTutor.com上看到代码实时执行,也可以在repl.it上运行它:

https://repl.it/@Joan_IndianaInd/missing-numbers-in-array

版权所有©Joan Indiana Lyness 2019

如果您错过了它:算法101:JavaScript中的旋转数组—三种解决方案

如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异相关推荐

  1. excel两个指标相关性分析_如何用excel分析两组数据的相关性

    在Excel进行数据分析的时候,经常要分析两组数据的相关性.求出的值越接近1,那就说明相关性越大:越接近0,说明相关性越小.下面就说说具体步骤. 具体步骤如下所示: 1. 数据分析,以比较男女两组身高 ...

  2. matlab中如何区分两幅图的亮度_高中历史教学中利用老地图设计习题的尝试

    相较历史地图侧重"时空观念"的特点,老地图的优势在于"史料实证"与"历史解释".笔者利用两幅同一时期且呈现同一地区却由不同国家绘制出版的老地 ...

  3. mvc 两个控制器session 丢失_用纯 JavaScript 撸一个 MVC 程序

    前言 我想用 model-view-controller 架构模式在纯 JavaScript 中写一个简单的程序,于是我这样做了.希望它可以帮你理解 MVC,因为当你刚开始接触它时,它是一个难以理解的 ...

  4. java二维数组周边元素_求出二维数组主对角线、次对角线以及周边元素之和

    某个同学的题目,写了一下. 题目大概是这样的: 编写函数,求出二维数组主对角线.次对角线以及周边元素之和. 要求:二维数组的行数.列数.数组元素在main函数中由键盘输入. #include int ...

  5. 用户id可以出现在url中吗_下载Google Drive中的文件

    通过Python下载Google Drive中的文件的代码如下: download_googledrive.py import

  6. java输出两个整数的积_如何检查Java中的两个数字相乘是否会导致溢出?

    如何检查Java中的两个数字相乘是否会导致溢出? 我想处理两个数字相乘导致溢出的特殊情况. 代码看起来像这样: int a = 20; long b = 30; // if a or b are bi ...

  7. mysql两个查询结果差集_【Mysql】求两个表(查询结果)的差集

    求两个查询结果的差集,Mysql直接提供了关键字not in,但是not in的效率极其低下,出现例如求一个上千查询结果在上万查询结果的差集,那么使用not in来查询的查询速度极其缓慢,这是必须使用 ...

  8. access查询两列信息合并输出_如何在Access中合并两个数据表中的数据

    当我们使用Access处理数据时,我们经常需要合并具有相同表结构的两个数据记录.那么如何实现这一功能呢?以下编辑愿与您分享. 工具/材料 Access 操作方法 打开Access软件,新建两个数据表. ...

  9. origin两个图层图例合并_利用origin软件将两个图形完美合并的方法

    科研中为了使图形传达出更大的信息量,有时也为了美观,往往需要将两个或更多的图形合并为一个图.origin软件可以很好的解决这个问题,下面以反映美国吸烟情况的两幅图为例进行说明如何利用origin软件将 ...

最新文章

  1. ecshop修改注册、增加手机
  2. 理解 Linux 的虚拟内存
  3. Django(part9)--GET请求
  4. Nokia7610彩信设置
  5. JSP调用request方法获取请求相关信息
  6. idea下如何正确导入多个module
  7. java构建大根堆_构建大根堆
  8. opencv+Dlib python瘦脸代码
  9. integer判断是否为null_面试常考题JavaScript用七种方式教你判断一个变量是否为数组类型...
  10. jieba 使用笔记
  11. UG NX10.0软件安装教程
  12. 使用python搜索Excel表,查找内容
  13. 3款常见的网站文章采集工具推荐(2019最新)
  14. 阿里云计算acp认证报考条件及需要具备的知识
  15. 面试神仙打架?探秘华为人工智能工程师岗位
  16. 天正建筑中如何将标注单位M改为mm
  17. Qiyuan-接小球游戏3.0
  18. postgresql 锁_PostgreSQL中的锁:3.其他锁
  19. 煲汤C语言,煲汤秘诀,附9款排骨汤做法,总有一款适合你!
  20. FFT—音频频谱设计

热门文章

  1. 千灯腾碧人潮涌,蓬勃“雨花”气如虹
  2. oracle 批量修改表结构,关于Oracle批量修改表结构相关内容的整理
  3. mysql 代码如何导出数据_mysql导入导出.sql数据
  4. linux下wxr的权限,Day16-Linux权限知识和应用实践讲解
  5. 关于解决安装pwndbg问题sys.stderr.write(f“ERROR: {exc}“) /usr/bin/python3.5: No module named ensurepip
  6. Travis CI mysql_DevOps工具介绍连载(34)——Travis CI
  7. python多值参数函数介绍,数字累加例子
  8. python 定义一个插入数据(可以插入到每个表中)通用的方法
  9. 币对交易所_比特币向1万4大涨,OK交易所的比特币为什么反而贬值7折?
  10. linux ubuntu文件浏览器如何显示隐藏文件?(快捷键ctrl+h)