刷题第一题 两数之和 回顾
简单级别,思路也很简单,分为暴力法与hashMap法.
刚开始我很自然,就用了暴力法,还很繁琐的暴力法,代码在这…
在已经定义好函数头的函数里写,上面三个参数与返回值不要忽略,要心中有数.
首先,定义数组可以这样
var array = new Array(); 与其他面向对象语言一样,构造函数基本包括,
- 传入数字Array(3),表示数组长度.
- 传入具体值,Array(“a”,“b”);
不过一般就只用 var a = []; 直接这样定义数组.方便简洁
然后就是一个嵌套循环,很好理解.
最主要的还是第二种方法体现的思想,hashmap.
这人let 是定义一个本地变量 即 for循环用完就销毁了.
dif 是每个数与这个固定结果 target 的差值,因而也是一个固定值.
我的理解是既然这两个值能够关联起来,就可以用一个map 来存储其关系.
下两行就是建立map 与 检测 了,
拿着nums数组里的第一个数,我去map里找,怎么找,下标啊!既然是关系映射,就得那这个关系去找啊,关系是啥,差值,因而,拿这个差值当下标去map里找,和我有关系的这个之在不在,在哪,在不再就是是否为undefined,在哪就是里面保存的值.
所以找到了就是里面存了一个下标,拿着下标回nums里去取值或者直接返回下标
这就是 下一句的含义;
如果map里dif 位置 不是undefined ,说明之前建立了关系了,那我就拿着这个map[dif],里的内容去nums里找那个关系数,怎么找,当然还是下标,所以存的就是下标,本题直接返回了这个下标,表示 我 num[i] 这个数 与 num[map[dif]] 这个数 有关系!!! 当然不是那种关系…咳 ,就只是个和为target的关系…
如果…没找到和num[i] 有关系过的数咋办 =.=!
很简单 在map里留个求关系贴, map[nums[i]] = i;
合拍的自然顺着关系就来找你了.
总结一下 建立map 这种思想.
每一个需要建立关系的元素,在map里留下自己的关系需求和位置信息.
*
比如 关系是相加为10.
3来了: M,我的需求是7
Map 去map[7] 看了一眼 空的
Map : 不好意思 7没来过.
3 : 好吧 ,我的位置是 x ,让7来找我.
Map : 慢走 不送.
Map 加了一个 3的小柜子,存了3 的地址 ,Map[3] = x;
静等.
终于 ,7 来了.看了一眼Map关系
7: M,我的需求是 3.
Map 去map[3] 看了一眼,挂着🔒
Map : 您好,3来过,请稍侯,我去取出他给你的地址
Map 拿来了地址x.
然后
return
*
over
2019.12.13