数组(vector)
初始化
1 | vector<int> v(size); |
遍历数组
1 | for (int i = 0; i < vec.size(); ++i) { |
数组追加到另一个数组
1 | vec1.insert(vec1.end(), vec2.begin(), vec2.end()); |
排序数组+去重
1 | sort(nums.begin(), nums.end()); |
逆序排序
1 | sort(nums.begin(), nums.end(), greater<int>()); |
二维vector初始化
1 | vector<vector<bool>> visited(rows, vector<bool>(cols, false)); |
链表
反转链表
1 | ListNode* reverseList(ListNode* head) { |
快慢指针找中间节点
1 | class Solution { |
双向链表节点定义
1 | struct DLinkedNode { |
队列(Queue)
1 | queue<int> q; |
双端队列(Deque)
1 | deque<int> dq; |
优先级队列/堆(priority_queue)
求第k大的数
- 大根堆: 建大小为n的堆, 弹出k-1次,堆顶为第k大的数
- 小根堆: 维护大小为k的堆,取堆顶元素
大根堆(默认)
1 | int findKthLargest(vector<int> &nums, int k) { |
小根堆
1 | int findKthLargest(vector<int> &nums, int k) { |
自定义优先级
求k个最小距离的点
1 | class Solution { |
集合(unordered_set)
1 | unordered_set<int> s; |
哈希表(unordered_map)
1 | unordered_map<int, DLinkedNode*> ht; |
TreeMap
自定义优先级
1 | class Cmp { |
字符串(String)
是否包含子串
1 | s2是否包含s1 |
比较两个字符串的字典序
1 | s1 < s2 |
整数转字符串
1 | string s = to_string(10); |
去除所有空格
1 |
末尾添加字符
1 | string s; |
排序
自定义排序
1 | static bool compare(vector<int> &a, vector<int> &b) { |
拓扑排序
BFS, 每次把入度为0的点入队列)
1 | vector<int> degree(size, 0); |
并查集
1 | vector<int> parents; |
字典树
1 | struct TrieNode { |
单调栈、树状数组
LeetCode python CheetSheet
列表
初始化
1
2v = [1,2,3]
v = [0] * 5 # [0,0,0,0,0]二维列表初始化
5行4列, 初始值为01
v = [[0 for _ in range(4)] for _ in range(5)]
末尾追加一个元素
1
2
3>>> v.append(4)
>>> v
[1, 2, 3, 4]末尾删除一个元素
1
2
3>>> v.pop()
>>> v
[1,2,3]指定位置插入元素(insert)
1
2>>> v.insert(0, -1)
[-1, 1, 2, 3, 4]删除指定位置的元素(del)
1
2>>> del v[0]
[1, 2, 3, 4]删除指定位置的元素, 并获取被移除元素(pop)
1
2
3
4
5
6
7>>> v
[1,3,5,7]
>>> e = v.pop(1)
>>> e
3
>>> v
[1,5,7]删除第一个匹配的元素(remove)
1
2>>> v.remove(2)
[1, 3, 4]删除所有匹配元素
1
2
3
4>>> v = [1,2,2,3,4,5]
>>> v = [x for x in v if x != 2]
>>> print(v)
[1,3,4,5]正向遍历列表
1
2for item in v:
print(item)倒序遍历列表
1
2for item in reversed(v):
print(item)按下标遍历列表
1
2for index in range(len(v)):
print(v[index])按下标倒序遍历列表
1
2for idx in range(len(v)-1, -1, -1):
print(v[idx])正向遍历索引和值
1
2for idx, val in enumerate(list):
print(idx, val)
注: Python range函数
1 | range(start, stop[, step]) |
一个列表追加到另一个列表
1
2
3
4
5a = [1,2,3]
b = [4,5,6]
a.extend(b)
print(a)
[1,2,3,4,5,6]列表排序
1
v.sort()
倒序排序
1
v.sort(reverse=True)
列表排序并去重
1
2
3
4v = [3,3,2,2,1,1]
sorted_v = sorted(set(v))
print(sorted_v)
[1,2,3]自定义排序
lambda表达式
1 | points = [[1,3],[-2,2],[5,8],[0,1]] |
普通函数
1 | points = [[1,3],[-2,2],[5,8],[0,1]] |
链表
- 翻转链表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
def reverse_list(head):
prev = None
curr = head
while curr:
next_temp = curr.next
curr.next = prev
prev = curr
curr = next_temp
return prev
new_head = reverse_list(head)
队列(deque)
1 | from collections import deque |
线程安全队列(queue.Queue)
1 | from queue import Queue |
优先级队列(heapq)
默认最小堆
1 | import heapq |
注: 如果要模拟最大堆可以把数值取反后压入堆中
- 求第k大的数
1
2
3
4
5
6
7def findKthLargest(nums: List[int], k: int) -> int:
heap = []
for x in nums:
heapq.heappush(heap, -x)
for i in range(k-1):
heapq.heappop(heap)
return -heapq.heappop(heap)
集合
1 | s = {1,2,3} |
字典
1 | dic = {} |
- 访问值
1
2person.get('name', 'Unknown') # 获取key对应值, 如不存在返回None
person['name'] # 访问值 - 删除键值对
1
del person['name']
- 遍历字典
遍历key1
2
3
4
5
6for key in person:
print(key)
for key in person.keys():
print(key)
for val in person.values():
print(val)
字符串
1 | upper() 转大写 |
查找
1 | text = 'hello world' |
分割和连接
1 | text = "apple,banana,cherry" |
去除空白字符
1 | text = " hello world " |
format格式化字符串
1 | str = 'My name is {} and I am {} years old.'.format(name, age) |
是否包含子串
1 | text = 'hello world' |
整数转字符串
1 | str(123) |