20181007_ARTS_week15

栏目: Python · 发布时间: 6年前

内容简介:第十五周 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


以上所述就是小编给大家介绍的《20181007_ARTS_week15》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Ethnography and Virtual Worlds

Ethnography and Virtual Worlds

Tom Boellstorff、Bonnie Nardi、Celia Pearce、T. L. Taylor / Princeton University Press / 2012-9-16 / GBP 21.00

"Ethnography and Virtual Worlds" is the only book of its kind - a concise, comprehensive, and practical guide for students, teachers, designers, and scholars interested in using ethnographic methods t......一起来看看 《Ethnography and Virtual Worlds》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换