简答题
- 数组/列表的索引为什么是从0开始的?
从0开始能够给出更好的不等式,元素下标就等于序列中它前面的元素数 - 数组和链表之间有什么异同点?
数组是将一种相同类型元素存储在连续存储空间的数据结构
连标是线性数据结构,每个元素都是单独的对象,各个元素之间通过指针链接
不同点:数组连续 链表不连续 - 数组和列表之间有什么异同点?
列表是长度可变的数组,可以在运行中实时扩容 - 在你所使用的编程语言中,数组和列表之间是否存在严格的区别?
在python中并没有太大区别 - 栈的特点是什么?队列的特点是什么?
栈 后进先出的线性表
队列:先进先出的线性表 - 你能否用一个双向队列来实现一个栈?
可以 - 优先队列和队列之间有什么异同点?
都是队列 优先队列可以直接插入和删除 - 哈希表和数组之间有什么异同点?
哈希表查找更快 - 哈希表(map)和哈希集合(set)之间有什么异同点?
map是一组键值对结构,有极快的查找速度
集合(set) 是一组key 的集合不储存value set中没有重复的key - 给定一个数组[5, 3, 8, 1, 9, 6, 7, 8, 2],请描述用这个数组构建一个单调递减栈(从栈顶到栈底单调递减)的过程。
为了构建一个单调递减栈,我们需要从数组的从左到右依次遍历元素,并根据以下规则来维护栈的单调递减性:
1.如果栈为空,或者栈顶元素大于或等于当前元素,则将当前元素直接压入栈
2.如果栈顶元素小于当前元素,则将栈顶元素弹出,直到栈顶元素大于等于当前元素或者栈为空,然后将当前元素压入栈
过程:以下是构建单调送减栈的详细步聚:
输入数组
5,3,8,1,9,6,7,8,2
过程步骤
1.开始时,栈为空
2.处理元素 5:
。栈为空,将5压入栈.
栈状态: 5
3.处理元素 3:
栈顶元素 5 大于 3,直接将 3 压入栈。
栈状态: 5.3
4.处理元表 8:
栈顶元素 3 小于 8,弹出 3.
新的栈顶元素 5 小于 8,弹出 5
栈为空,将8 压入栈.
栈状态: 8 - 处理元素1:
。 栈顶元奏 8 大于 1,直接将 1 压入栈。
栈状态: 8.1
6.处理元素 9:
。 栈顶元奏1 小于 9,弹出 1.
。 新的栈顶元素 8 小于 9,弹出 8.
。栈为空,将9压入栈,
栈状态: 9
7.处理元素 6:
。栈顶元奏 9 大于 6,直接将 6压入栈
栈状态: 9,6
8.处理元表 7:
·栈顶元妻6 小于 7,弹出 6,
新的栈顶元素 9 大于 7,将7压入栈。e
。栈状态:9.7
9.处理元素 8:
栈顶元素7 小于 8,弹出 7
新的栈顶元妻 9 大于 8,将 8 压入栈。e
栈状态: 9.8
10.处理元素 2:
栈顶元奏 8 大于 2,直接将 2 压入栈.
栈状态: 9,8,2