解法一

如果 answer[i]!=answer[j] ,显然这两只兔子的颜色不可能一样。同理,两只兔子颜色相同的必要条件是 answer[i]==answer[j]
举个例子,假如有9只兔子都回答了3,那么可以分为三组 [3,3,3,3],[3,3,3,3],[3] ,第一组的四只颜色相同,且不可能再有更多相同颜色的兔子了,否则就与它们的回答矛盾了。第二组的四只颜色相同,不过是另一种颜色。第三组的一只兔子也拥有独特的颜色,且还有3只和它颜色相同的兔子并没有回答。因此从这9只兔子的回答可以推断出至少有12只兔子。
根据以上例子,就可以针对每一群回答相同的兔子,推断出它们的最小数量。

  1. class Solution {
  2. public int numRabbits(int[] answers) {
  3. final int LEN = 1000;
  4. // count[i]表示回答为i的兔子数量
  5. int[] count = new int[LEN];
  6. for (int i : answers) {
  7. ++count[i];
  8. }
  9. // 兔子总数
  10. int ans = 0;
  11. for (int i = 0; i < LEN; ++i) {
  12. ans += count[i] / (i + 1) * (i + 1);
  13. count[i] %= i + 1;
  14. if (count[i] != 0) {
  15. ans += i + 1;
  16. }
  17. }
  18. return ans;
  19. }
  20. }