跳转至

数组 Array

一般典型的数组是固定长度的数组,即其内存空间是固定的,每个元素也都是相同类型的,比如Java的数组。也有动态数组,比如Python的list,无固定长度,元素可以是任意类型。

栈 Stack

后进先出(LIFO)。栈进出的一端称为top(想象成一叠盘子)。进操作称为push或add,出操作称为delete或pop。

队列 Queue

先进先出(FIFO)。队列进的一端称为end(想象成排队的队尾),出的一端称为front。进操作称为enqueue,出操作称为dequeue。

可以用固定数组模拟队列,只需要多记录首尾的index。更新数组时,除了添加新元素,只需要调整首尾的index。当然整个队列大小有限制。

还能用双栈模拟队列。对,就是你想到的最直觉的形式。虽然挺麻烦,但每个元素最多只会进入/转移/弹出各一次,所以均摊到每个元素,时间复杂度是O(1)。当然这个很奇葩冷门,就和冒泡排序一样只是好玩。

优先队列 Priority Queue

优先队列(priority queue)能保证出来的第一个元素始终是满足某种排序的最大或最小的元素,基本操作包括获取、删除最大元素和添加元素。具体的实现可以是数组或者排序数组,但heap(堆)是最高效的实现。

习题

TODO 题名改成中文

# 题名
977 Squares of a Sorted Array
1089 Duplicate Zeros
88 Merge Sorted Array
27 Remove Elements
26 Remove Duplicates from Sorted Array
905 Sort Array By Parity
1051 Height Checker
448 Find All Numbers Disappeared in an Array