隊(duì)列
- 一個(gè)先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)
- javascript中沒有隊(duì)列籽腕,但可以用Array實(shí)現(xiàn)隊(duì)列的所有功能
隊(duì)列的應(yīng)用場(chǎng)景
- 需要先進(jìn)先出的場(chǎng)景
- 比如:食堂排隊(duì)打飯崎岂、JS異步中的任務(wù)隊(duì)列、計(jì)算最近請(qǐng)求次數(shù)
JS異步中的任務(wù)隊(duì)列
- JS是單線程眉撵,無法同事處理異步中的并發(fā)任務(wù)
- 使用任務(wù)隊(duì)列先后處理異步任務(wù)
計(jì)算最近請(qǐng)求次數(shù)
- 越早發(fā)出的請(qǐng)求越早不在最近3000ms內(nèi)的請(qǐng)求里
- 滿足先進(jìn)先出,考慮用隊(duì)列
這題看到答案那么多人連題目都看不懂我就放心了。
條件就是第一個(gè)輸入如果為ping针姿,則將第二個(gè)輸入當(dāng)前時(shí)間毫秒數(shù)放進(jìn)隊(duì)列中。隊(duì)列中小于當(dāng)毫秒數(shù)的就出隊(duì)列厌衙,當(dāng)然題目假設(shè)全都是結(jié)果為ping(什么拍平啊距淫,concat的全都不用),所以要做的就是將當(dāng)前t - 3000毫秒外的踢出去婶希,返回當(dāng)前隊(duì)列中的長(zhǎng)度就行了榕暇,題目不難
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
};
/**
* Your RecentCounter object will be instantiated and called as such:
* var obj = new RecentCounter()
* var param_1 = obj.ping(t)
*/