有一个数组,其中是兔子说和它一样的有几只,相同的兔子说的一定相同,但说的相同的不一定是相同的兔子,因为不是所有的兔子都说话了,求最少的兔子数量。
可以用贪心来求,将数组排序,如果此时为arr[i],则有这种兔子的数量应该为arr[i]+1,那么可以跳过arr[i]+1这么多只兔子(如果后面数组也为arr[i]的话)
和arr[i]不一样的话那就另外算。
class Solution {
public int numRabbits(int[] cs) {
Arrays.sort(cs);
int n = cs.length;
int ans = 0;
for (int i = 0; i < n; i++) {
int cnt = cs[i];
ans += cnt + 1;
// 跳过「数值 cnt」后面的 cnt 个「数值 cnt」
int k = cnt;
while (k-- > 0 && i + 1 < n && cs[i] == cs[i + 1]) i++;
}
return ans;
}
}