題目
給你一個下標從?0?開始的整數數組?
tasks
?,其中?tasks[i]
?表示任務的難度級別。在每一輪中,你可以完成 2 個或者 3 個?相同難度級別?的任務。返回完成所有任務需要的?最少?輪數,如果無法完成所有任務,返回?
-1
?。
解題思路
- 找規律:相同難度的任務數 = 2 * n + 3 * m,只有1無法滿足;
- 用map統計各難度任務數量;
- 最少輪數肯定要盡可能多的一次完成3個,所以同難度任務數不為1時應為為3n + 1、3n + 2或3n,3n + 1 = 3(n - 1) + 2 * 2(任務數為n + 1),3n + 2(任務數為n + 1),3n(任務數為n)
- 判斷相同難度的任務除3是否有余數,有則+1;
- 統計各難度所需要的輪數。
代碼展示
class Solution {public int minimumRounds(int[] tasks) {Map<Integer,Integer> data = new HashMap<>();for(int task : tasks){int num = data.getOrDefault(task, 0);data.put(task, num + 1);}int sum = 0;for(Integer num : data.keySet()){if(data.get(num) == 1){return -1;}int n = data.get(num) / 3;if(data.get(num) % 3 != 0){n = n + 1;}sum += n;}return sum;}
}