静态链表

用数组模拟链表的好处是方便,代码量少,而且不需要用到指针,减少因为指针出现的错误。

在静态链表中,我们使用head表示头节点的下标,初状态下head=-1,说明表空。

将元素加入到头节点之后,head更新为这个元素的下标,表示这个元素就是这个表的新头节点。

具体可以看看代码,比较简单。

Read more

单调栈

单调栈是指栈内的元素单调递增或者递减,主要是以$O(n)$的时间解决NGE问题(Next Greater Element)。就是在每个元素中,找到下一个比他大的1数。(或者其他的变式)。

img

可以类似于身高,2只能看到4是第一高的,1只能看到2是第一高的…同理。

Read more

单调队列

单调队列稍有不同,需要用到双端队列模拟。不然的话无法正常满足单调性。

并且双端队列最好自己手写,用c++的dequeue效率非常慢,很容易tle的。

单调队列常用于解决连续k个数中的操作,比如滑动窗口问题。

img

Read more

并查集—合并集合

并查集可以表示元素中的属于状态,比较重要。其核心元素是father数组,初始化如下:

1
2
3
4
5
void init() {
for(int i = 0; i < n; i++) {
father[i] = i
}
}
Read more
Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×