不会跑

Python、Linux 与算法实践笔记

这里记录 Python、Linux 和算法实践。教程从一个具体问题出发,解释选择一种实现的原因,并用小例子检查边界条件。

从这些教程开始

旧笔记保留在文章目录。文章上的日期是最初发布时间,修订日期会单独显示;运行旧代码前请留意 Python 和工具版本。

最近发布

29 Jun 2017

最小栈:重复最小值为什么不能漏记

从重复最小值的反例推导双栈不变量,说明空栈行为与均摊复杂度,并给出可直接运行的操作序列检查。
29 Jun 2017

LeetCode-Reorder_List

经典的链表题,考查了反转链表和一些细节,题意也很明白,把L0→L1→…→Ln-1→Ln变为L0→Ln→L1→Ln-1→L2→Ln-2→…即可,原题链接:https://leetcode.com/problems/reorder-list/ ...
28 Jun 2017

LeetCode-Partition_List

晚上送妹子回家后做了这个链表的题,怕自己忘了睡前总结下。 题目的意思就是:给定一个链表和一个数,把小于这个数的节点放前边,此外的都移到后边,而且保证两部分的节点原有顺序不变;在自己憋了一个来小时后终于AC了,后来对比其他人的提交结果,发现基...
28 Jun 2017

LeetCode-Linked_List_Cycle_II

判断链表是否存在循环的变形题,需要你找出链表循环的开始节点,解题思路:先用快慢指针便利链表知道快慢指针指向同一个节点,然后让快指针从head重新开始走,这次每个指针一次只走一步,再一次指向相同节电的第一个就是要找的节点; 可以用简单的数学推...
28 Jun 2017

LeetCode-Linked_List_Cycle

经典的链表题,判断一个链表是否存在循环,而且不许使用额外的空间,解题思路:只要分别设定一个快慢指针,当快慢指针重合时就证明有循环,原题链接:https://leetcode.com/problems/linked-list-cycle/ G...
28 Jun 2017

LeetCode-Copy_List_with_Random_Pointer

一个比较经典的链表操作题,深度复制一个链表,链表包含一个next指针和一个random的指针,目前比较多的方法是hash表和自我复制法(在自己后面加一个自己),我写的是第二种方法需要注意的细节比较多,后面加了别人的hash表方法,原题链接:...
28 Jun 2017

LeetCode-Remove_Nth_Node_From_End_of_List

比较简单的一个题,意思就是删除链表中倒数第几个节点,需要最后考虑下删除的是否恰巧为头节点,原题链接:https://leetcode.com/problems/remove-nth-node-from-end-of-list/ Given ...
23 Jun 2017

最长递增子序列:从动态规划到二分查找

推导 LIS 的两种状态表示,用反例区分最小末尾数组与真实子序列,并通过穷举小输入检查重复值和空输入。
23 Jun 2017

Python三目运算符两种写法及exec的用法

三目运算符第一种写法: In [302]: a = 1 if 5 > 3 else 0 In [303]: a Out[303]: 1 In [304]: a = 1 if 2 > 3 else 0 In [305]: a Ou...
23 Jun 2017

Python bisect:用时间窗口理解左右边界

用带重复时间戳的事件列表推导半开区间查询,区分插入位置、查找结果与列表插入成本,并提供可运行的边界检查。