【Leetcode 每日一题】781. 森林中的兔子

问题背景

森林中有未知数量的兔子。提问其中若干只兔子 "还有多少只兔子与你(指被提问的兔子)颜色相同?" ,将答案收集到一个整数数组 a n s w e r s answers answers 中,其中 a n s w e r s [ i ] answers[i] answers[i] 是第 i i i 只兔子的回答。

给你数组 a n s w e r s answers answers,返回森林中兔子的最少数量。

数据约束

  • 1 ≤ a n s w e r s . l e n g t h ≤ 1000 1 \le answers.length \le 1000 1≤answers.length≤1000
  • 0 ≤ a n s w e r s [ i ] < 1000 0 \le answers[i] < 1000 0≤answers[i]<1000

解题过程

找规律,考虑到要求数量最少,假设当前数组元素是 i t e m item item,它共有 n u m num num 个等值元素,那么答案会增加 ⌈ n u m i t e m + 1 ⌉ \lceil \frac{num}{item + 1} \rceil ⌈item+1num⌉。

建立数组元素与数量之间的哈希映射,再遍历计算结果即可。

具体实现

java 复制代码
class Solution {
    public int numRabbits(int[] answers) {
        Map<Integer, Integer> count = new HashMap<>();
        for (int item : answers) {
            count.merge(item, 1, Integer::sum);
        }
        int res = 0;
        for (Map.Entry<Integer, Integer> entry : count.entrySet()) {
            int item = entry.getKey();
            int num = entry.getValue();
            res += (item + num) / (item + 1) * (item + 1);
        }
        return res;
    }
}
相关推荐
We་ct3 小时前
LeetCode 5. 最长回文子串:DP + 中心扩展
前端·javascript·算法·leetcode·typescript
王老师青少年编程7 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【哈夫曼贪心】:合并果子
c++·算法·贪心·csp·信奥赛·哈夫曼贪心·合并果子
叼烟扛炮7 小时前
C++第二讲:类和对象(上)
数据结构·c++·算法·类和对象·struct·实例化
天疆说7 小时前
【哈密顿力学】深入解读航天器交会最优控制中的Hamilton函数
人工智能·算法·机器学习
wuweijianlove8 小时前
关于算法设计中的代价函数优化与约束求解的技术7
算法
leoufung8 小时前
LeetCode 149: Max Points on a Line - 解题思路详解
算法·leetcode·职场和发展
样例过了就是过了8 小时前
LeetCode热题100 最长公共子序列
c++·算法·leetcode·动态规划
HXDGCL9 小时前
矩形环形导轨:自动化循环线的核心运动单元解析
运维·算法·自动化
谭欣辰9 小时前
C++ 排列组合完整指南
开发语言·c++·算法
代码中介商9 小时前
银行管理系统的业务血肉 —— 流程、状态机、输入校验与持久化(下篇)
c语言·算法