leetcode进度

19.9.4 做了三道简单题。155,1027和1047

  • 字符串转数组:split()方法。
  • 数组转字符串:①toString() ②join() ③将数组和字符串用+连接,赋给一个变量,这个变量自动转变成字符串
  • slice()方法可去数组的头和尾
  • Infinity是正无穷
  •  比较最小数:Math.min(x,y) 具体使用:① Math.min.apply(Math, this.stack); 这个我还不太懂为什么参数一是Math,有一些用null就可以了 贴一个链接 ② Math.min(...this.stack); 这是ES6的
  • forEach()方法还不太会用(下面是forEach的介绍)

语法

array.forEach(function(currentValue, index, arr), thisValue)

参数

参数

描述

function(currentValue, index, arr)

必需。 数组中每个元素需要调用的函数。
函数参数:

参数

描述

currentValue

必需。当前元素

index

可选。当前元素的索引值。

arr

可选。当前元素所属的数组对象。

thisValue

可选。传递给函数的值一般用 "this" 值。
如果这个参数为空, "undefined" 会传递给 "this" 值

技术细节

返回值:

undefined

JavaScript 版本:

ECMAScript 3


 19.9.5 还是三道简单题:2栈:844和682,1排序:1122。

JS有好多方法,以前只是看,现在终于到实操了。

  • 682新知识点:
    * (高程P85)访问对象属性一般用点表示法,但也可以用方括号来访问,但用方括号时,需以字符串的形式放在方括号中。方括号访问的主要优点:可以通过变量来访问属性。
    在参考代码中,"+"不可去除引号。因为传入的ops本身是存字符的数组。
    * 关键字in  链接:[js 关键字 in 的使用方法](https://www.cnblogs.com/fuqiang88/p/8043750.html)
    稍微总结就是,
      * for(变量 in 数组)时,迭代出来的是数组元素;(注意!这是用数组[变量]的方式才能迭代数组元素,和for用法一样)
      * for(变量 in 对象)时,迭代出来的是对象属性;
      * (变量 in 对象)时,
    当“对象”为数组时,“变量”指的是数组的“索引”;
    当“对象”为对象是,“变量”指的是对象的“属性”。
    还有:for in 取 key(键) ; for of 取 value(值)
    for of 只能用于数组遍历 ; for in 还可以用于对象属性的遍历
  • 所以一般for in用于对象,for of用于数组
    * reduce()方法:一个归并方法。高程P97
  • 比较两个字符串是否相等,可用全等号
  • shift():移除数组的第一项,splice(i,1):删除位置i的一项,concat():可用于排序×(9.6表示:concat不是用来排序!sort才算用来排序。concat是用来拼接的,下面的代码是指数组result和arr1剩余的数进行一个拼接
result.concat(arr1.sort((a,b) => a - b));

19.9.6 四道简单题:2栈:496和1030,2排序:976和922

  • map():高程P97。该函数返回一个数组,而这个数组的每一项都是在原始数组中的对应项上运行传入函数的结果,因此适合创建包含的项与另一个数组一一对应的数组
  • indexOf():返回要查找的项在数组中的位置(从数组开头向后查找)。laseIndexOf是从末尾往前
  • 976. 三角形的最大周长的思路很巧妙。根据边长a,b,c满足a <= b <= c,则a + b > c这一条件来写。用sort排好序之后利用数组下标进行条件判断即可
  • 1030. 距离顺序排列矩阵单元格中要求的结果是数组里包含着点[x,y]表示,可以把点也当做一个数组。方括号可以访问的

  • Math.abs()是求绝对值

  • 922. 按奇偶排序数组 II,我看完官方题解之后,决定用双指针,我觉得这个用法很像快排里的一部分,很简洁。但是!我错了!用两个while分别对 i 和 j 的结束条件很不简洁。所以我换成了另一个思路。详见:922题解


19.9.7 目前一道中等题...503. 下一个更大元素 II

涉及知识点:单调栈

单调栈详细的解说:https://blog.csdn.net/liujian20150808/article/details/50752861

一般认为维护一个单调递增的栈,是从栈底到栈顶的元素值单调递增,如: 1 3 5 7 9

我们此时有一个单调递减的栈,然后此时我们碰到了大于栈顶元素的值,那么这个值一定是栈顶元素的下一个更大的元素。我们只需将栈顶元素弹出,然后通过字典记录它的下一更大的元素,最后再维护这个单调栈即可。

来自:https://blog.csdn.net/qq_17550379/article/details/86501664

待完成:1124. 表现良好的最长时间段(单调栈,前缀和) 和 739. 每日温度(单调栈)

前缀和 看 https://blog.csdn.net/qq_17550379/article/details/96005987


19.9.8 哭了..自己挖坑自己跳 想用单调栈实现下一个更大元素I,但是找不到修改的方法..就这么过了一个多小时  这道题可以用哈希 O(n)呢,在收藏夹里

每日温度那个我都还没消化完...

Array.from 类数组转换成数组

trunc是一种函数,是截取日期或数字,返回指定的值。函数trunc直接去除数字的小数部分。


19.9.9 做了876. 链表的中间结点 两个方法:①将链表存在数组里,用索引直接访问 ②用快慢指针,快的是慢的2倍,当快的到终点时,慢的刚好在中间 (但这道题有一些不懂的地方...

这两天看到好多用哈希的...

对ES6的constructor感到困惑时,看:https://www.jianshu.com/p/fc79756b1dc0

做了一点这个707. 设计链表,这题有坑,先留着吧,不想改了

237. 删除链表中的节点  解法:狸猫换太子。
https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/73-shan-chu-lie-biao-zhong-de-jie-dian-by-joeyzhou/  这个题解能学到Object.assign()


19.9.10 两道链表简单题

234. 回文链表 快慢针,反转前半部分。根据链表长度(奇or偶)做小改动。判断节点的val属性是否相等

206. 反转链表 有两个方法。迭代和递归,自己能实现迭代,但递归还得背一背


19.9.11 两道链表简单题 + 看哈希

链表简单题:

203. 移除链表元素 (踩了好多坑

160. 相交链表 (有点巧妙。弄两个指针,当遍历完自己的之后转去遍历对方的。这能够抵消两条链表的差异(节点数不同的差异),当指针第一次重合就是答案

哈希简单题:

数组的push可以一次push好几个的

1078. Bigram 分词

1160. 拼写单词

1.get的用法:返回根据键值检索到的特定的值
2.let newMap = new Map(map);//复制一个map
3.这题可多看


19.9.12(有点懈怠了,现在是20:53,我还在搞第一题

1002. 查找常用字符  题解:https://leetcode-cn.com/problems/find-common-characters/solution/js-by-blzbanme/

这题的解法三用了filter,不太懂。filter会返回return true的元素组成的数组,但下面这行代码,实在巧妙,我有点暂时接受不了。我的疑问是,temp[index] = 1这个,也算true的表达??

 return index !== -1 ? temp[index] = 1 : false;

242. 有效的字母异位词  我用的方法跟1002那道题一样,为什么那道题运行速度还行而这个运行速度直接飙2000ms?

 

我觉得排序这块会有很多可以用哈希的地方,如果明天还想练哈希的话,去排序那里看吧


19.9.13

350. 两个数组的交集 II 尝试用了四个方法解,但是中午叫了外卖..直接导致我之后没有学习了


19.9.14

104. 二叉树的最大深度

思路(我觉得这个思路可以参考) 来源题解
标签:DFS
找出终止条件: 当前节点为空
找出返回值: 节点为空时说明高度为0,所以返回0;节点不为空时则分别求左右子树的高度的最大值,同时加1表示当前节点的高度,返回该数值
某层的执行过程:在返回值部分基本已经描述清楚
时间复杂度:O(n)

993. 二叉树的堂兄弟节点 用了dfs 递归。

1185. 一周中的第几天 感觉逻辑没错但答案还是不对


19.9.15

965. 单值二叉树

589. N叉树的前序遍历未做


19.9.16

没做,搞懂了归并(递归+非递归)和快排


19.9.17 打算:两道leetcode,一道牛客网

589. N叉树的前序遍历

872. 叶子相似的树

做了份笔试题。

牛客网在线判题系统JavaScript(V8)使用

JS中将字符串中每个单词的首字母大写化

unicode,ansi,utf-8,unicode big endian编码的区别

JavaScript 如何定义一个二维数组


19.9.18

938. 二叉搜索树的范围和

897. 递增顺序查找树(哈哈哈哈实力瞎掰,突然发现自己掰对了

// 这是可以的,而且函数参数不需要传递数组res,按下面的形式res就能被修改了
let res = [];
 inOrderNode(root);

 function inOrderNode(root){
    ...res.push(...)
 }

897这道题,看官方题解,运行速度越来越慢。是因为js不适合构建节点?感觉新建节点就很慢很慢

897...我累了..实现完最后一个方法(用辅助栈)就不管它了!


19.9.19

1046. 最后一块石头的重量 (才一道题啊...花了我1h


19.9.20

以下两题...都不会,连题目都没懂,题解更加不想看了

973. 最接近原点的 K 个点  题解

1022 从根到叶的二进制数之和

20. 有效的括号

101 对称二叉树


19.9.21

1029. 两地调度(sort方法的参数,只需要参数名,就是传入的是二维数组,也一样

costs.sort((o1, o2) => {
        return o1[0]-o1[1]-(o2[0]-o2[1]);
    });

232. 用栈实现队列,225. 用队列实现栈  通过数组来实现就可以了,很简单,不总结

94. 二叉树的中序遍历 基于栈的遍历和莫里斯遍历还没弄~明天弄吧


19.9.22

参加了155周赛,做了接近两个小时的第一题...结果因为给的数太大了,直接爆掉...我也不想啊..我也很想拿3分的...

我感觉我把之前练习得来的经验全用在这道题上了...小范围的数值是能运行正确的

如何输出数组中的数组([ [ ,],[  ,],[ ,],[ ,] ]):先:var res = [];  var temp = [1,2],再res.push(temp);

把昨天94题的莫里斯弄了,之前的一个问题经常报错的问题也解决了(!s和s.length!=0,js不能用!s表达数组非空)


19.9.23

144. 二叉树的前序遍历

145. 二叉树的后序遍历(还没弄完)看官方题解的评论https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/er-cha-shu-de-hou-xu-bian-li-by-leetcode/   还有莫里斯的https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/mo-li-si-bian-li-bu-yong-zhan-bu-yong-di-gui-by-zh/ 还有最基础的后序迭代思路https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/145er-cha-shu-de-hou-xu-bian-li-javascript-ti-jie-/


19.9.28

我胡汉三又回来了!!这几天一直在补前端的知识,早上没打码,去看笔试错了题目了(但效率好像不高555)
今天把后序的剩下三个思路补全啦~撒花
之后忙的话还是希望能每天一题~


19.9.30

其实昨天我看了一道题的....但是没写....
思路还记得


19.9.30

emmm我这几天回家看两题题解,19和整数反转


19.11.23

https://www.nowcoder.com/discuss/101711?type=5剑指offer js版

收藏夹leetcode有几篇


19.11.27开始看剑指Offer

面试题4:二维数组中的查找

一开始没思路,要不就暴力破解。想到两个最值,min(左上角)和max(右下角),先把整数值与两个最值比较。

看完题解:通过数组的右上角来逐步缩小查询数组的范围。

你可能感兴趣的:(杂)