1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { public long totalCost(int[] costs, int k, int candidates) { PriorityQueue<Integer> leftQueue = new PriorityQueue<>((num1, num2) -> num1 - num2); PriorityQueue<Integer> rightQueue = new PriorityQueue<>((num1, num2) -> num1 - num2); int n = costs.length; int left = 0; int right = n - 1; for (int i = 0; i < candidates && left <= right; i++) { leftQueue.offer(costs[left++]); if (left <= right) { rightQueue.offer(costs[right--]); } } long ans = 0L; while (k-- > 0) { if (leftQueue.isEmpty() || !rightQueue.isEmpty() && leftQueue.peek() > rightQueue.peek()) { ans += rightQueue.poll(); while (left <= right && rightQueue.size() < candidates) { rightQueue.offer(costs[right--]); } } else { ans += leftQueue.poll(); while (left <= right && leftQueue.size() < candidates) { leftQueue.offer(costs[left++]); } } } return ans; } }
|