解法一
如果 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;}}
