Untitled

mail@pastecode.io avatar
unknown
plain_text
20 days ago
1.5 kB
2
Indexable
Never
import java.util.Collections;
import java.util.PriorityQueue;

public class Solution {
    public static int minimumTime(int[] ability, long processes) {
        // Create a max-heap using a priority queue
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
        for (int a : ability) {
            maxHeap.offer(a);
        }

        int time = 0;
        while (processes > 0) {
            if (maxHeap.isEmpty()) {
                // All processors have zero ability left
                break;
            }

            // Get the processor with the maximum ability
            int maxAbility = maxHeap.poll();

            // Schedule processes equal to the minimum of remaining processes and maxAbility
            long scheduled = Math.min(processes, maxAbility);
            processes -= scheduled;

            // Reduce the processor's ability to floor(ability / 2)
            int newAbility = maxAbility / 2;
            if (newAbility > 0) {
                maxHeap.offer(newAbility);
            }

            // Increment time after each scheduling
            time++;
        }

        return time;
    }
    
    public static void main(String[] args) {
        // Use sample input
        int n = 5;
        int[] ability = {2, 1, 5, 3, 1};
        long processes = 17;
        
        int result = minimumTime(ability, processes);
        System.out.println(result);  // Expected output: 9
    }
}
Leave a Comment