Skip to content

Instantly share code, notes, and snippets.

@kapiljhajhria
Last active May 27, 2020 06:22
Show Gist options
  • Save kapiljhajhria/a754100428331fb8f6fb4328b1eda7fa to your computer and use it in GitHub Desktop.
Save kapiljhajhria/a754100428331fb8f6fb4328b1eda7fa to your computer and use it in GitHub Desktop.
function minInterval(tasks, n) {
let lastNtasks = [];
let taskOccurrence = new Map();
tasks.forEach((task) => {
taskOccurrence.set(task, (taskOccurrence.get(task) || 0) + 1)
})
let entries = Array.from(taskOccurrence.entries())
let count = 0;
while (entries.length > 0) {
entries = entries.sort((a, b) => b[1] - a[1])
if (lastNtasks.length > n) lastNtasks.shift()
let [key, keyCount] = entries.find(([k,_]) => !lastNtasks.includes(k)) || [null, null]
lastNtasks.push(key || "idle");
count++
if(key){
(keyCount - 1) === 0 ? taskOccurrence.delete(key) : taskOccurrence.set(key, keyCount - 1);
}
entries = Array.from(taskOccurrence.entries());
}
return count;
}
console.time("start")
console.log(minInterval(["A", "A", "A", "B", "B", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K"], 7)) //18
console.log(minInterval(["A", "A", "A", "B", "B", "B"], 2) === 8)//8
console.log(minInterval(["A","A","A","B","B","B"],3)===10)//10
console.log(minInterval(["A"],7)===1) //1
console.log(minInterval(["A","B"],7)===2) //2
console.log(minInterval(["A","B","A"],3)===5) //5
console.log(minInterval(["B","A","A"],3)===5) //5
console.log(minInterval(["B","A","A","B"],1)===4) //4
console.log(minInterval([],1)===0) //0
console.log(minInterval([],0)===0) //0
console.log(minInterval(['A', 'A', 'B', 'B', 'B', 'C', 'D'], 2)===7) //7
console.log(minInterval(["A","A","B","B","C","C","D","D","E","E","F","F","G","G","H","H","I","I","J","J","K","K","L","L","M","M","N","N","O","O","P","P","Q","Q","R","R","S","S","T","T","U","U","V","V","W","W","X","X","Y","Y","Z","Z"], 2)) //52
console.timeEnd("start")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment