栈和队列✅
说一下栈和队列的结构的特点?
答案
栈的特点:
- 栈是一种线性数结构,只能在一端进行插入和删除操作,这一端称为栈顶。
- 栈是一种后进先出(LIFO)的数据结构,最后入栈的元素最先出栈。
- 栈的操作只能在栈顶进行,插入元素称为入栈,删除元素称为出栈。
- 栈的应用场景:函数调用栈、表达式求值、括号匹配等。
队列的特点:
- 队列是一种线性数据结构,只能在一端插入元素,在另一端删除元素,分别称为队尾和队头。
- 队列是一种先进先出(FIFO)的数据结构,最先入队的元素最先出队。
- 队列的操作只能在队头和队尾进行,插入元素称为入队,删除元素称为出队。
- 队列的应用场景:任务调度、消息队列、广度优先搜索等。
Tests
括号匹配
/**
* 括号匹配
* 输入:s = "()[]{}"
* 输出:true
* 输入:s = "([)]"
* 输出:false
*/
function isValid (s) {
}
答案
Tests
递减栈温度匹配
/**
* 给定一个整数数组 T,返回一个新数组,为每个元素 x 找到下一个更大的元素 y,使得 x < y 的最小等待天数。
* 输入:T [19, 22, 20, 25, 21, 19, 16, 23, 24]
* 输出:D = [1, 2, 1, 0, 3, 2, 1, 1, 0]
* 解释初始含义
* D[0] = 1 因为 19 -> 22 等待 1 天
* D[1] = 2 因为 22 -> 25 等待 2 天
* D[2] = 1 因为 20 -> 25 等待 1 天
* D[3] = 0 因为 25 气温在这之后不会再升高
* D[4] = 3 因为 21 -> 23 等待 3 天
* D[5] = 2 因为 19 -> 23 等待 2 天
* D[6] = 1 因为 16 -> 23 等待 1 天
* D[7] = 1 因为 23 -> 24 等待 1 天
* D[8] = 0 因为 24 气温在这之后不会再升高
*/
function dailyTemperatures (T) {
}
答案
Tests
最小栈
/**
* 设计一个支持 push、pop、top 操作,并能在常数时间内检索到最小元素的栈。
* push(x) 将元素 x 推入栈中。
* pop() 删除栈顶的元素。
* top() 获取栈顶元素。
* getMin() 检索栈中的最小元素。
*
* push(-2)
* push(0)
* push(-3)
* getMin() // 返回 -3
* pop()
* top() // 返回 0
* getMin() // 返回 -2
*
*/
interface MinStack {
push (x: number): void
pop (): void
top (): number
getMin (): number
}
答案
Tests
用栈实现队列
/**
* 使用栈实现队列
* 实现队列的基本操作:enqueue、dequeue、peek、empty
* enqueue(1)
* enqueue(2)
* peek() // 返回 1
* dequeue() // 返回 1
* empty() // 返回 false
* enqueue(3)
* empty() // 返回 false
* dequeue() // 返回 2
* dequeue() // 返回 3
* empty() // 返回 true
*/
interface StackQueue {
enqueue(x: number): void;
dequeue(): number;
peek(): number;
empty(): boolean;
}
答案
Tests
双端队列最近的较大元素
/**
* 给定一个数组,返回一个等长的数组,对应索引存放下一个更大元素,如果没有更大的元素则存放 -1。
* 要求:使用双端队列实现,时间复杂度 O(n)
*
* 输入:nums = [2, 1, 2, 4, 3]
* 输出:[4, 2, 4, -1, -1]
* 解释:
* - 2 的下一个更大元素是 4
* - 1 的下一个更大元素是 2
* - 2 的下一个更大元素是 4
* - 4 没有下一个更大元素,返回 -1
* - 3 没有下一个更大元素,返回 -1
*/
function nextGreaterElement (nums: number[]): number[] {
// 实现函数
}
答案
Tests
滑动窗口
/**
* 给定一个整数数组 nums 和一个整数 k,返回数组中每个连续 k 个元素的最大值。
* 输入:nums = [1, 3, -1, -3, 5, 3, 6, 7], k = 3
* 输出:[3, 3, 5, 5, 6, 7]
*/
function maxSlidingWindow (nums: number[], k: number): number[] {
// finish the function
}
答案
Tests