力扣刷题笔记(小白自用持续更新)

一些函数

1、strip()、lstrip()和rstrip()

strip()返回的是字符串的副本,并删除前导和后缀字符。如果参数为空,会默认删除字符串头和尾的空白字符(包括\n,\r,\t)。

lstrip()去掉左边的(头部);rstrip()去掉右边的(尾部)。

2、Counter()

统计字符串里每个字符个数

s = "bcabc"
Counter(s)
# 输出
Counter({'b': 2, 'c': 2, 'a': 1})

3、返回str形式

        return ''.join()

4、set()

set() 函数创建一个无序不重复元素集,可进行关系测试,删除重复数据,还可以计算交集、差集、并集等。

list1=[1,2,3,3]

s=set(list1)

add(key)往集合中添加元素重复的元素自动过滤

remove(key)方法可以删除元素

交集,使用&操作符; 并集,使用|操作符

5、deque

deque是为了实现插入和删除操作的双向列表,适用于队列和栈

from collections import deque
d = deque()
# 添加元素
d.appendleft()
d.append()
# 删除元素
d.popleft()
d.pop() 
# 逐个添加列表元素
d.extendleft()
d.extend()
# 清空
d.clear()
# e.g.
d=deque([1,2,3,4,5])
d.extend([0])
d=deque([1,2,3,4,5,0])

6、排序 sorted()

7、lambda() / filter() / reduce() / map()

map(function, iterable) 根据提供的函数对指定序列做映射

filter(function, iterable) 用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表

reduce(function, iterable)对参数序列中元素进行累积

lambda arguments: expression 创建匿名函数 

def square(x) :
    return x ** 2
list(map(square, [1,2,3,4,5]))   # 使用 list() 转换为列表
# [1, 4, 9, 16, 25]

list(map(lambda x: x ** 2, [1, 2, 3, 4, 5]))   # 使用 lambda 匿名函数
# [1, 4, 9, 16, 25]

list(filter(lambda x: x % 2 == 0, [1, 2, 3, 4, 5, 6]))
# [2, 4, 6]

reduce(lambda x, y: x * y, [1, 2, 3, 4, 5])
# 120

8、列表拷贝、切片、倒序

复制:

b=a 默认浅拷贝,即拷贝的是对象的地址,修改拷贝的值的时候原对象也a会随之改变

使用narray.copy()进行深拷贝(b = a.copy()),即仅拷贝numpy对象中的数据。

切片:

# 切片案例
players = ['charles','martina','michael','florence','eli']
print(players[1:3])
print(players[:3])
print(players[3:])
print(players[-3:])

['martina', 'michael']
['charles', 'martina', 'michael']
['florence', 'eli']
['michael', 'florence', 'eli']

倒序reverse:

lista = [1, 2, 3, 4]
lista.reverse()
print(lista)

[4, 3, 2, 1]

一些算法

1、贪心

在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。

nonlocal关键字用于在嵌套函数中声明一个非局部变量。它允许在内部函数中访问和修改外部函数的变量

2、栈、队列

stack = []  #创建
stack.append()  #入栈
stack.pop()  #出栈
stack[-1]  #最后一个数

3、堆

优先队列(特殊的完全二叉树)

最小堆:所有父结点都比子结点小 ; 最大堆:所有父结点都比子结点大

插入:先将新数据放在数组最后,重复判断是否交换插入元素和它的父节点(shift-up)。

import heapq
a = []   #创建一个空堆
# heapq.heappush()是往堆中添加新值,此时自动建立了小根堆
for i in [18, 1, 20, 10, 5, 200]:
    heapq.heappush(a,i)
# 输出
[1, 5, 20, 18, 10, 200]

# 但heapq里面没有直接提供建立大根堆的方法,可以采取如下方法:
# 每次push时给元素加一个负号(即取相反数),此时最小值变最大值,
# 那么实际上的最大值就可以处于堆顶了,返回时再取负即可

# 列表转化为堆
a = [18, 1, 20, 10, 5, 200]
heapq.heapify(a)

heapq.heappop(a) # 从堆中弹出并返回最小的值

heapq.heappushpop(a,1) # 先加入1,再弹出并返回最小的值

4、双指针

通常一快一慢/一左一

右,可以大大降低时间复杂度,可用在数组,单链表等数据结构中。

一些概念 

1、字典序

如”abc“ < “acb” < “acbd”, 其规则是先比较第一个字母,如果不相等,就直接得到结果,如果相等,就比较下一个字母。
如果两个字符串的长度不相等,但是长的那个字符串包含了短的那个,那长的那个字符串更大(比如"acb" < “acbd”)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值