# 基本用法
- 一个先进先出的数据结构
const queue = []
// 入队
queue.push(1)
queue.push(2)
// 出队
const item1 = queue.shift()
const item2 = queue.shift()
# 使用场景
- js 异步中的任务队列:JS 是单线程,无法同时处理异步中的并发任务。
- 计算最近请求次数
# 算法题:最近的请求次数:
写一个 RecentCounter 类来计算特定时间范围内最近的请求。
请你实现 RecentCounter 类:
RecentCounter() 初始化计数器,请求数为 0 。
int ping(int t) 在时间 t 添加一个新请求,其中 t 表示以毫秒为单位的某个时间,并返回过去 3000 毫秒内发生的所有请求数(包括新请求)。确切地说,返回在 [t-3000, t] 内发生的请求数。
保证 每次对 ping 的调用都使用比之前更大的 t 值。
链接:https://leetcode-cn.com/problems/number-of-recent-calls
const RecentCounter = function() {
this.q = []
};
/**
* @param {number} t
* @return {number}
*/
RecentCounter.prototype.ping = function(t) {
this.q.push(t);
while(this.q[0] < t - 3000) {
this.q.shift();
};
return this.q.length;
};
# 算法题:回文检查器
function palindromeChecker(aString) {
if (aString === undefined || aString === null || (aString !== null && aString.length === 0)) {
return false
}
const deque = []
const lowerString = aString.toLocaleLowerCase().split(' ').join('')
let isEqual = true
let firstChar, lastChar
for (let i = 0; i < lowerString.length; i++) {
deque.push(lowerString.charAt(i))
}
while(deque.length > 1 && isEqual) {
firstChar = deque.shift()
lastChar = deque.pop()
if (firstChar !== lastChar) {
isEqual = false
}
}
return isEqual
}
console.log('a', palindromeChecker('a'))
console.log('aa', palindromeChecker('aa'))
console.log('kayak', palindromeChecker('kayak'))
console.log('level', palindromeChecker('level'))
console.log('Was it a car or a cat I saw', palindromeChecker('Was it a car or a cat I saw'))
console.log('Step on no pets', palindromeChecker('Step on no pets'))
# 算法题:回文数检查器
const isPalindrome = function(x) {
if(x < 0) return false;
const num = x.toString();
const reverStr = [...num].reverse().join('');
return num === reverStr;
}
阅读量: