您的研究機構剛剛收到一臺新的超級計算機。它能夠同時處理幾項不同的任務,但前提是它知道每項任務需要多長時間才能得出結果。程序javascript的時間複雜度,用於計劃任務
這臺超級計算機測量時間以時間爲單位,並在以下方式操作:
需要處理的所有任務都放置在隊列中。 隊列頂部的任務恰好給定了1個CPU時間單位。如果未完成,則將其放置在隊列的後面。 隊列中的任務重新調度由特殊處理單元管理,因此不需要額外的CPU時間。 您已將您的任務提交到處理隊列,並且您想了解需要等待多長時間直到結果準備就緒。
給定taskQueue爲一個正整數數組,其中taskQueue [i]表示爲隊列中的第i個任務提供結果所剩餘的CPU時間的時間單位數,以及一個正整數n作爲您的當前索引taskQueue中的任務(從0開始),查找在完成任務之前需要等待的時間單位數。
例
對於TASKQUEUE = [3,1,2]且n = 2時,輸出應該是 多任務(TASKQUEUE中,n)= 5 如果我們通過隊列狀態與1個單位時間步驟如下: [3,1,2'] - > [1,2',2] - > [2',2] - > [2,1'] - > [1',1] - > [1] 您的任務標記爲'。 對於TASKQUEUE = [1,2,3,1,2]和n = 0時,輸出應該是 多任務(TASKQUEUE中,n)= 1 輸入/輸出
[時限] 4000ms(JS) [input] array.integer taskQueue
第ith個整數表示隊列中第i個任務給出結果所剩的CPU時間單位的數量。
保證約束: 1≤taskQueue.length≤105 1≤TASKQUEUE [I]≤109
[輸入]整數n
在TASKQUEUE你的任務的索引(從0開始)。
保證約束: 0≤n < taskQueue.length。
[輸出] integer64
,你需要等待,直到你的任務完成時間單位數。
這是我寫的代碼:
function multitasking(taskQueue, n) {
let queue = new Queue(taskQueue,n);
while(queue.data.length) {
queue.runTask();
}
return queue.count;
}
function Queue(data,n) {
this.data = [...data];
this.taskIndex = n;
this.count = 0;
this.requeue = function() {
let firstvalue = this.data[0];
if(this.taskIndex) {
this.taskIndex--;
} else if(!firstvalue) {
this.data = [];
return;
} else {
this.taskIndex = this.data.length-1;
}
if(firstvalue) {
this.data.push(firstvalue);
}
this.data.shift();
}
this.runTask = function() {
this.data[0]--;
this.count++;
this.requeue();
}}
這非常適用於大多數情況下。但時間複雜度很高。對於。例如。
多任務([1000000000,1000000000],1)這不能解決4000ms以下。任何人都可以幫助我減少時間複雜性?