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

问题背景

森林中有未知数量的兔子。提问其中若干只兔子 "还有多少只兔子与你(指被提问的兔子)颜色相同?" ,将答案收集到一个整数数组 a n s w e r s answers answers 中,其中 a n s w e r s i answersi answersi 是第 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 answersi < 1000 0≤answersi<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;
    }
}
相关推荐
嵌入式老牛16 小时前
三相电气量采集模块设计(三)非同步采样时的精度提升
算法·精度·计量
今天AI了吗17 小时前
精细化落地教程:TimechoAI调参标准+数据清洗规范+误差归因+阈值适配全维度指南
大数据·人工智能·算法
zephyr0518 小时前
从递归到迭代:二叉树非递归前中后序遍历详解
算法
evans在进步18 小时前
LeetCode 2 两数相加:链表模拟加法,Java 图解进位过程
java·leetcode·链表
Dr.kangder18 小时前
嵌入式总线设备解析——TTE总线应用与实践
开发语言·网络·算法·嵌入式·多任务·同步机制
Hi李耶18 小时前
【LeetCode】557.反转字符串中的单词 III
算法·leetcode·职场和发展
yyy(十一月限定版)18 小时前
016【入门】双端队列
数据结构·c++
深蓝学院18 小时前
机器人学习算法五大体系详解:模仿、强化、多模态、持续学习……
算法·机器人
白狐_79819 小时前
408数据结构:中缀转后缀与操作符栈容量——真题精讲
前端·javascript·数据结构
2401_8582861119 小时前
OS82.【Linux】设计线程池
java·linux·运维·服务器·开发语言·算法·线程池