教你用 python 高效刷 leetcode
16460
2019.12.23
发布于 未知归属地

由于 Python 语法的简洁性,用 python 来刷 leetcode 往往能用比别的语言更少的代码量 AC。但是如果不是对 python 很熟悉就会比较尴尬了,如果有些功能明明有高效的内置方法因为不知道要自己实现、或者不了解其复杂度提交时出现超时。

我总结了一下自己在刷 leetcode 时关于 python 这个语言的经常被使用的数据结构和内置方法。

基础

离开数据结构,算法就是空中楼阁,所以了解 python 内置的数据类型用法和其效率是非常有必要的。

list

list 作为最常见的内置数据结构,其不仅可以当作 C 语言的数组来使用,一些 python 特有的特性往往可以事半功倍。

append 在 list 的结尾追加一个元素。

sort 对 list 进行排序,在 list 长度小的时候使用插入排序,在长度大的时候使用快排,所以其时间复杂度可以视为

pop 将最后一个元素从 list 内部弹出并返回。

切片 python 强大的语法糖之一,不仅可以用非负数索引,负数索引的合理使用可以节省不少代码量。

set

set 本质是哈希表,会对其内部元素去重,检查一个元素是否在set内部的时间复杂度是

常用的方法为

add 添加一个元素,就算是用一个元素多次添加,其内部也仅保留一份。

pop 随机弹出一个元素并返回。

dict

同 set 一样,dict 本质也是哈希表,但是 set 是单个元素,dict 是 key-value 的组合。

setdefault 接受两个入参 key、default, 如果 dict 存在 key 则不做任何操作,如果不存在 key,则创建一个 key 其 value为default。

get 同 setdefault 一样接受两个参数 key、default,如果存在 key,则返回其 value,否则返回 default。

pop 同 setdefault 一样接受两个参数 key、default,如果存在 key,则删除 key 返回其 value,否则返回 default。

str

字符串也是一个经常在算法中常用的数据结构,在 python 中 str 是不可变对象,支持 ”+“ 操作当时效率不高需要慎用。

split 用指定的分隔符将 str 分割为 list。

strip 返回 str 去掉首尾的空白符后新的 str,原来的 str 不受影响。

join 用 str 作为连接符连接参数里面的每一个元素,常常用来替代 ”+“。

进阶

这里介绍几个常用的内置函数。

int 将一个参数转为 int 类型,在遇到字母等字符时会抛出错误。

sum 返回参数的求和。

min 返回多个参数的最小值。

max 返回多个参数的最大值。

abs 返回一个数字的绝对值

高级

这里对于数据结构的知识点要求就比较高了,仅仅介绍常用方法,如果不了解其特性的还请自己查阅资料。

queue 队列

put 入队操作。

get 出队操作。

qsize 返回当前队列的长度。

list 栈

这里又有 list,是因为 python 没有单独的栈,在需要栈的时候往往使用 list。

append 入栈。

pop 出栈。

heapq 堆

仅支持最小堆,有个小技巧:如果最大堆,取反之后再放入堆,取出的时候再取反。

heapfiy 将一个 list 转为最小堆。

heappush 往一个最小堆添加元素。

heappop 弹出堆中的最小值并返回。

评论 (3)