算法修炼手册

经典算法总结(个人版)

1.最大公约数

1
2
def res(x, y):
return res(y, x % y) if y else x

2.数组求逆序

1
2
3
def change(self,nums: List[int], s: int, e: int) -> None:   #num 数组 s: 起始索引 e: 末尾索引
for i in range(math.ceil((e - s + 1) / 2)):
nums[s+i], nums[e - i] = nums[e - i], nums[s+i]

3.链表快慢指针

1
2
3
4
5
6
7
8
s = q = head

while q and q.next: #s最终指向 中间(奇) 后半部分 第一个节点 (偶)
#2 while q.next and q.next.next: s最终指向 中间(奇) 前半部分 最后一个节点 (偶)
s = s.next
q = q.next.next
#1 s 指向中间节点 s = Math.ceil(n/2)
#2 s 指向中间节点 s = Math.ceil(n/2) 奇数 s = n/2 偶数