贪心
如果两只兔子的回答一样,则他们属于同一种颜色,否则他们的颜色不同。
将回答一样的兔子进行分组,假设x只兔子回答y,那么至少有 ceil(x / (y+1))种颜色,每种颜色至少有 (y + 1)只,至少有 ceil(x / (y+1)) * (y + 1)只兔子。
向上取整可以这样计算:
x / n = (x + n) / n
class Solution {
public int numRabbits(int[] answers) {
Map<Integer, Integer> count = new HashMap<>();
for (int y : answers) {
count.put(y, count.getOrDefault(y, 0) + 1);
}
int ans = 0;
for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
int x = entry.getValue(), y = entry.getKey();
ans += (x + y) / (y + 1) * (y + 1);
}
return ans;
}
}