友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
|
|
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

公众号的微信号是: jikerizhi。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
781. 森林中的兔子
森林中有未知数量的兔子。提问其中若干只兔子 "还有多少只兔子与你(指被提问的兔子)颜色相同?",将答案收集到一个整数数组 answers 中,其中 answers[i] 是第 i 只兔子的回答。
给你数组 answers ,返回森林中兔子的最少数量。
示例 1:
输入:answers = [1,1,2] 输出:5 解释: 两只回答了 "1" 的兔子可能有相同的颜色,设为红色。 之后回答了 "2" 的兔子不会是红色,否则他们的回答会相互矛盾。 设回答了 "2" 的兔子为蓝色。 此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。 因此森林中兔子的最少数量是 5 只:3 只回答的和 2 只没有回答的。
示例 2:
输入:answers = [10,10,10] 输出:11
提示:
-
1 <= answers.length <= 1000 -
0 <= answers[i] < 1000
思路分析
本质上,是一道向上取整的数学题。
取整公式
\[\left\lceil \frac{a}{b} \right\rceil = \left\lfloor \frac{a+b-1}{b} \right\rfloor\]
-
一刷
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2026-06-17 22:19:42
*/
public int numRabbits(int[] answers) {
Map<Integer, Integer> counter = new TreeMap<>();
for (int num : answers) {
counter.put(num, counter.getOrDefault(num, 0) + 1);
}
List<Integer> nums = new ArrayList<>(counter.size());
int result = 0;
for (Map.Entry<Integer, Integer> entry : counter.entrySet()) {
int k = entry.getKey();
int v = entry.getValue();
if (v % (k + 1) == 0) {
result += v;
} else {
result += (v / (k + 1) + 1) * (k + 1);
}
}
return result;
}

