内容简介:第十五周 ARTS,算法题 Merge Two Sorted Lists,看了一篇讲为什么选择 NodeJS 作为脚本语言的文章,分享了让 node 模块既可以作为脚本被命令行使用又可以作为模块被引用的 tip,分享了日常中看到的吃嚼碎了的知识的现象与看法。这个写的比较杂乱,因为一开始思路就是想着比较大小,然后构造新的节点,赋值,找下一个,做成单链表。因为要比较是否是 null 以及实际值,所以比较条件写的有点复杂,因为要构造一个新的单链表,空间复杂度也比较高。写完通过测试用例之后看了下别人的解法,直接使
第十五周 ARTS,算法题 Merge Two Sorted Lists,看了一篇讲为什么选择 NodeJS 作为脚本语言的文章,分享了让 node 模块既可以作为脚本被命令行使用又可以作为模块被引用的 tip,分享了日常中看到的吃嚼碎了的知识的现象与看法。
Algorithm
/** * Merge Two Sorted Lists * https://leetcode.com/problems/merge-two-sorted-lists/description/ * * Definition for singly-linked list. * function ListNode(val) { * this.val = val; * this.next = null; * } */ /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var mergeTwoLists = function(l1, l2) { if (!l1 && !l2 ) { return [] } var item = new ListNode(); var cur = item; while(l1 || l2) { var val1 = l1 ? l1.val : null; var val2 = l2 ? l2.val : null; if ((val1 != null && val2 != null) && val1 <= val2) { cur.val = val1 l1 && (l1 = l1.next); } else if ((val1 != null && val2 != null) && val1 > val2) { cur.val = val2 l2 && (l2 = l2.next); } else { var tmpVal1 = l1 ? l1.val : 0; var tmpVal2 = l2 ? l2.val : 0; cur.val = tmpVal1 ? tmpVal1 : tmpVal2; l1 && (l1 = l1.next); l2 && (l2 = l2.next); } if (l1 || l2) { // 判断是否要加下一个节点 cur.next = new ListNode(); cur = cur.next } } return item; };
这个写的比较杂乱,因为一开始思路就是想着比较大小,然后构造新的节点,赋值,找下一个,做成单链表。因为要比较是否是 null 以及实际值,所以比较条件写的有点复杂,因为要构造一个新的单链表,空间复杂度也比较高。
写完通过测试用例之后看了下别人的解法,直接使用已有的节点,当有一方为空的时候,就返回另外一方,还是挺巧妙的,可以参考一下。
var mergeTwoLists = function(l1, l2) { var item = new ListNode(); var cur = item; while(l1 !== null && l2 !== null) { var val1 = l1 ? l1.val : null; var val2 = l2 ? l2.val : null; if ( l1.val <= l2.val) { cur.next = l1 l1 = l1.next; } else { cur.next = l2 l2 = l2.next; } cur = cur.next } cur.next = l1 !== null ? l1 : l2; return item.next; };
Review
Why I Use NodeJS for Basically Everything I Do.
https://medium.com/@kieranmaher13/why-i-use-nodejs-for-basically-everything-i-do-e0a627787ecc
If you do it more than once, write a script.
作者介绍了他认为 NodeJS 在写脚本方面比 Python C# Go 更好的三个理由。
- 非 I/O 阻塞
- 自己保护自己(原文使用:It takes care of itself),这里作者主要讲的是 V8 引擎在自动垃圾回收方面的东西。老实说,我觉得这个不能成为一个特别令人信服的理由。
- 搭建可交互界面。这里主要说的是网页,老实说,这是个更不能让人信服的理由。
作者给出的三个理由其实并没有特别大的说服力,脚本语言的选择很多,并不一定说 NodeJs 就比 Python 能好多少,关键还是看使用场景以及使用人的熟悉程度。
不过我还是推荐 Python 的,毕竟人生苦短。
Tip
在 node 中,你的模块可能会作为一个脚本本使用,比如 node something.js
或者被别的模块引用,比如 require('something.js')
,这个时候可以对你的模块做一些处理,兼容两种情况:
if (!module.parent) { // ran with `node something.js` app.listen(8088, function() { console.log('app listening on port 8088'); }) } else { // used with `require('/.something.js')` module.exports = app; }****
Tip 来源 http://www.jstips.co/en/javascript/nodejs-run-a-module-if-it-is-not-required/
Share
这周耗子哥在专栏结束语中写了这样几句话:
大多数人都失去了获取知识的能力,你就算把知识放放在他们面前,他们也不会去学习,他们需要你喂,甚至需要你帮他们嚼碎了,帮他们消化过了,他们才能吃得到,消化得了。
真的是说的非常有道理。平常写代码的时候有时会有这样一个情况,遇到一些问题先去网上搜,而不是先找找文档,这其实也是一个吃别人消化过的问题的现象。
如果搜到解决方案之后再了解下原理,摸索一下解决的过程,这样也还挺好,最怕就是不求甚解,把代码一个 copy 就完事了。
所以有时候,网上很多人问类似的东西怎么写,就是某个东西稍微变一变,就不一样的,哪有那么多百分百 match 的东西。
看得懂,学的会,用得着方为学习之道。
碎碎念
记录一些所思所想,写写科技与人文,写写生活状态,写写读书心得,主要是扯淡和感悟。 欢迎关注,交流。
微信公众号:程序员的诗和远方
公众号ID : MonkeyCoder-Life
以上所述就是小编给大家介绍的《20181007_ARTS_week15》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C程序设计题解与上机指导
谭浩强 / 清华大学 / 2000-9-1 / 19.50元
《C程序设计题解与上机指导(第2版)》是和谭浩强编著的《C程序设计》(第二版)(清华大学出版社1999年出版)配合使用的参考书,内容包括:(1)《程序设计》(第二版)一书的习题和参考解答,包括了该书各章的全部习题,共约150题,对全部编程题都给出了参考解答;(2)上机指南,详细介绍了在当前广泛使用的Turbo C集成环境下编辑、编译、调试和运行程序的方法,并简要介绍了Borland C++的使用方......一起来看看 《C程序设计题解与上机指导》 这本书的介绍吧!