# 0781. Rabbits in Forest ###### tags: `Leetcode` `Medium` `Math` Link: https://leetcode.com/problems/rabbits-in-forest/ ## 思路 计算出所有答案的count把他们归为一类 拿ans=1的举例 如果只有两个rabbit说1,也就是[1,1], 那么他们可能是同一个颜色的,所以```res += 2``` 如果有三个rabbit说1,那么他们可能分为两组,每组的rabbit数为2,一组是两个说1的rabbit,另一组里面包含另外一个说1的rabbit,还有一个它的组员没有被问到 所以```res += (3+1)/2*2``` 之所以写成```res += ((cnt[i]+i)/(i+1))*(i+1);```的形式是因为后面的```i+1```是每个组rabbit的数量 前面是有多少个组 如果不加i 就会取floor 但我们需要ceiling ## Code ```java= class Solution { public int numRabbits(int[] answers) { int[] cnt = new int[1001]; for(int ans:answers) cnt[ans]++; int res = 0; for(int i=0; i<cnt.length; i++){ if(cnt[i]>i+1){ res += ((cnt[i]+i)/(i+1))*(i+1); } else if(cnt[i]!=0) res += i+1; } return res; } } ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up