队列

  • 一个先进先出的数据结构,先放进去的后拿出来,先进先出,保持有序

  • JavaScript中虽然没有队列但是可以通过array进行实现

1
2
3
4
5
6
const stack = []
stack.push(1)
stack.push(2)

const item1 = stack.shift()
const item2 = stack.shift()

题目 最近请求次数

https://leetcode-cn.com/problems/number-of-recent-calls/

思路: 使用栈实现

时间复杂度:O(n)

空间复杂度:O(n)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var RecentCounter = function () {
this.q = []
};

/**
* @param {number} t
* @return {number}
*/
RecentCounter.prototype.ping = function (t) {
this.q.push(t)
while (this.q[0] + 3000 < t) {
this.q.shift()
}
return this.q.length
};

事件循环于任务队列

​ 如果执行事件的过程中,如果遇到了异步任务,比如dom操作,ajax,setTimeout,就会将事件交给webApi执行, 不会加入任务队列

​ 直到异步任务结束,回调函数加入任务队列,如果回调函数里面还有异步任务,就继续做放入wenAPI里面做事件循环