Tengo este código Java a continuación, que estoy tratando de escribir su equivalente en JavaScript. El código usa una cola de prioridad que es nativa de Java pero no de JavaScript. Intenté escribir un código similar en JavaScript pero no obtengo el resultado requerido. ¿Cómo escribo esto, particularmente la sección de cola de prioridad en el código Java? Tenga en cuenta que el resultado requerido de esta llamada de método es 6
Código Java:
public class Main { public static void main(String[] args) { int [] counter = new int[]{3,2,5}; int k=4; System.out.println(findTotalTime(counter,k)); } public static int findTotalTime(int[] counter, int k){ //Priority queue section I am mostly curious about PriorityQueue<int[]> pq = new PriorityQueue<>((a,b)-> (a[0] == b[0] ? Integer.compare(a[1],b[1]) : Integer.compare(a[0],b[0]))); for(int i=0;i<counter.length;i++) pq.add(new int[]{0,i}); int endTime=0; for(int i=0;i<=k;i++){ int info[] = pq.poll(); int counterTime = info[0]; int index = info[1]; endTime = counterTime + counter[index]; pq.add(new int[]{endTime, index}); } return endTime; } }
Mi intento de un equivalente de JavaScript:
const findTotalTime = (counter, k) => { let queue = [] for (let i = 0; i < counter.length; i++) { queue.push([0, i]) } queue.sort((a, b) => {return a[0] <= b[0] ? a[1] - b[1] : a[0] - b[0]}) let endTime = 0 for (let i = 0; i <= k; i++) { let info = queue.shift() let [counterTime, index] = info endTime = counterTime + counter[index] queue.push([endTime, counter[index]]) } return endTime } console.log(findTotalTime([3, 2, 5], 4))