解法一
如果 answer[i]!=answer[j]
,显然这两只兔子的颜色不可能一样。同理,两只兔子颜色相同的必要条件是 answer[i]==answer[j]
。
举个例子,假如有9只兔子都回答了3,那么可以分为三组 [3,3,3,3],[3,3,3,3],[3]
,第一组的四只颜色相同,且不可能再有更多相同颜色的兔子了,否则就与它们的回答矛盾了。第二组的四只颜色相同,不过是另一种颜色。第三组的一只兔子也拥有独特的颜色,且还有3只和它颜色相同的兔子并没有回答。因此从这9只兔子的回答可以推断出至少有12只兔子。
根据以上例子,就可以针对每一群回答相同的兔子,推断出它们的最小数量。
class Solution {
public int numRabbits(int[] answers) {
final int LEN = 1000;
// count[i]表示回答为i的兔子数量
int[] count = new int[LEN];
for (int i : answers) {
++count[i];
}
// 兔子总数
int ans = 0;
for (int i = 0; i < LEN; ++i) {
ans += count[i] / (i + 1) * (i + 1);
count[i] %= i + 1;
if (count[i] != 0) {
ans += i + 1;
}
}
return ans;
}
}