算法 - 隊(duì)列類型

隊(duì)列

  • 一個(gè)先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)
  • javascript中沒有隊(duì)列,但可以用Array實(shí)現(xiàn)隊(duì)列的所有功能

隊(duì)列的應(yīng)用場景

  • 需要先進(jìn)先出的場景
  • 比如:食堂排隊(duì)打飯、JS異步中的任務(wù)隊(duì)列、計(jì)算最近請求次數(shù)

JS異步中的任務(wù)隊(duì)列

異步隊(duì)列
  • JS是單線程,無法同事處理異步中的并發(fā)任務(wù)
  • 使用任務(wù)隊(duì)列先后處理異步任務(wù)

計(jì)算最近請求次數(shù)

leeCode第933題

  • 越早發(fā)出的請求越早不在最近3000ms內(nèi)的請求里
  • 滿足先進(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ì)列中的長度就行了,題目不難

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)
 */
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容