Share

分享最近看的一部纪录片:《互联网之子》,该片讲述了亚伦·斯沃茨的一生。他是 RSS 和 Markdown 的开发者,也是 Creative Commons 的组织者;是 Web.py 的设计者,也是Reddit 的合伙人。他倡导互联网自由精神,却最终不堪政府逼迫英年早逝。

影片的开头引用了梭罗的一句话:

Unjust laws exist;(世有不公之法)
shall we be content to obey them,(我们是安于循守)
or shall we endeavor to amend them,
and obey them until we have succeeded,(还是且改且守,待其功成)

or shall we transgress them at once?(或是即刻起而破之?)




- 阅读剩余部分 -

Algorithm

LeetCode 26. Remove Duplicates from Sorted Array

输入一个列表,要求返回去重后列表的长度,且必须在源列表上操作,空间复杂度限制为O(1)。

这道题乍看上去很简单,特别是使用 Python、JavaScript 这类语言的话,语言本身自带了一些列表去重的方法(转为 Set 再转回 List)。不过,这与题意相悖,而且要求空间复杂度为 O(1),关于内置转换方法的空间复杂度是否为 O(1) 这一点存疑。

一个更加通用的解法是使用快慢指针实现原址排列。快慢指针即使用两个指针遍历列表(或其它可遍历对象),然后据此作出对应的比较,是一种很常见的方法。时间复杂度为 O(n),空间复杂度为 O(1)。

Code Talks:

- 阅读剩余部分 -

Algorithm

Leetcode 002 - Add Two Numbers

本题考察了对链表的一些基本操作。思路很简单,就是按照小学学的加法原理,按位相加、满十进位即可。

def addTwoNumbers(self, l1, l2):
    p = ListNode(0)
    head = p
    carry = 0
    while l1 or l2:
        if l1:
            carry += l1.val
            l1 = l1.next
        if l2:
            carry += l2.val
            l2 = l2.next
        p.next = ListNode(carry % 10)
        carry = carry // 10
        p = p.next
    if carry==1:
        p.next = ListNode(1)
    return head.next

- 阅读剩余部分 -

Algorithm

LeetCode 007 - Reverse Integer

Given a 32-bit signed integer, reverse digits of an integer. When the reversed integer overflows, return 0.

def reverse(x):
    res = 0
    if x>=0:
        res = int(str(x)[::-1])
    else:
        res = -int(str(x)[:0:-1])
    return res if res >= -2**31 and res <= 2**31-1 else 0

- 阅读剩余部分 -

json5-logo

JSON5 是 JSON 的一个超集,通过引入部分 ECMAScript 5.1 的特性来扩展 JSON 的语法,以减少 JSON 格式的某些限制。同时,保持兼容现有的 JSON 格式。

JSON5 更像是 JavaScript 中的对象,但是它并不是 JSON 官方的扩展,所以需要 json5 作为文件扩展名。

- 阅读剩余部分 -