In a forest, each rabbit has some color. Some subset of rabbits (possibly all of them) tell you how many other rabbits have the same color as them. Those de >answersde> are placed in an array.
Return the minimum number of rabbits that could be in the forest.
Examples: Input: answers = [1, 1, 2] Output: 5 Explanation: The two rabbits that answered "1" could both be the same color, say red. The rabbit than answered "2" can't be red or the answers would be inconsistent. Say the rabbit that answered "2" was blue. Then there should be 2 other blue rabbits in the forest that didn't answer into the array. The smallest possible number of rabbits in the forest is therefore 5: 3 that answered plus 2 that didn't. Input: answers = [10, 10, 10] Output: 11 Input: answers = [] Output: 0
Note:
- de >answersde> will have length at most de >1000de>.
- Each de >answers[i]de> will be an integer in the range de >[0, 999]de>.
采访了若干只兔子,这些兔子都回答除了自己之外,还有多少只兔子的颜色和自己相同,问森林里最少有多少只兔子。
很简单可以想到,回答相同的兔子有可能是相同颜色的兔子,但是要考虑到,如果有三只兔子回答1,那么这三只兔子不可能都是同一种颜色,如果是这样的话,这三只兔子都会回答2。从这个例子看出来,如果有n只兔子回答i,那么这n只兔子里最多有(i+ 1)只是同一种颜色,剩余的(n-i-1)只仍然服从此规则。统计所有的i和n,运用上述规则,得解。代码如下
class Solution {
public int numRabbits(int[] answers) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int it : answers){
if(!map.containsKey(it))
map.put(it, 0);
map.put(it, map.get(it) + 1);
}
int res = 0;
for(int key : map.keySet()){
int num = map.get(key);
while(num > 0){
res += key + 1;
num -= key + 1;
}
}
return res;
}
}