当前位置:网站首页>781. 森林中的兔子
781. 森林中的兔子
2022-08-09 22:41:00 【InfoQ】
781. 森林中的兔子
森林中有未知数量的兔子。提问其中若干只兔子 "还有多少只兔子与你(指被提问的兔子)颜色相同?" ,将答案收集到一个整数数组 answers 中,其中 answers[i] 是第 i 只兔子的回答。
给你数组 answers ,返回森林中兔子的最少数量。
来源:力扣(LeetCode)
链接:
https://leetcode.cn/problems/rabbits-in-forest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
给兔子分组
先排序,让相同的兔子在一起
这样就可以让相同的兔子分组,组内自我消化
排序好了,我们要怎么计算出相同的兔子的数量呢,
我们发现第一种颜色有4只兔子的回答为1
那么在第一种颜色中可以分为2只兔子为一组
因为1代表这除了自己还有另外一只兔子颜色相同
因此2只兔子为一组,因此第一种颜色的兔子有4只
到了第2种颜色
2代表着除了自己还有2只兔子颜色相同
因此需要分成3只兔子为一组
但第二种颜色的兔子在数组中只有2只,无法凑齐3只
证明还有兔子没被调查,需要在额外补一只兔子,
因此第二种颜色的兔子数量为3
同理可得,第三种颜色的兔子有8只
第四种颜色的兔子有5只,因为数组中只有3只,需要另外补2只,
第五种颜色的兔子有6只
计算公式
变量x代表有多少只兔子颜色相同
c代表当前颜色的兔子在数组中有多少只
如果当前数是x,有c只,有几组?
我们以7个3为例子
3代表除了自己有3只兔子颜色相同
因此4只兔子为一组
我们需要分出2组
因此为7/4向上取整
那么怎么向上取整
原本是a/b
向上取整变为
(a+(b-1))/b
因此最后公式为((c+x)/(x+1))*(x+1),
代码
class Solution {
public int numRabbits(int[] answers) {
int n=answers.length;
if(answers==null||n==0){
return 0;
}
Arrays.sort(answers);
int x=answers[0];
int c=1;
int ans=0;
for(int i=1;i<n;i++){
if(x!=answers[i]){
ans+=((c+x)/(x+1))*(x+1);
x=answers[i];
c=1;
}else{
c++;
}
}
return ans+((c+x)/(x+1))*(x+1);
}
}
边栏推荐
- 基于 RocksDB 实现高可靠、低时延的 MQTT 数据持久化
- JS基础笔记-关于对象
- 软考 --- 软件工程(7)软件项目管理(下)
- 【集训DAY4】异或【字典树】
- 【JZOF】77 Print binary tree in zigzag
- CAD 截断线段
- Technology feast!Huayun Data brings six topics to OpenInfra Days China
- A Shanghai technology company was fined 220,000 for brushing orders, exposing the gray industry chain of online brushing
- 2022年最新《谷粒学院开发教程》:10 - 前台支付模块
- How to match garbled characters regularly?
猜你喜欢
随机推荐
CAD 连接两个相交线
tiup cluster start
探索TiDB Lightning源码来解决发现的bug
32 JZOF 】 【 print down on binary tree
SRv6 performance measurement
Gartner全球集成系统市场数据追踪,超融合市场增速第一
【集训DAY4】询问【Hash】
金仓数据库 KingbaseGIS 使用手册(6.2. 管理函数)
ABAP中Collect的用法
用哈希简单封装unordered_map和unordered_set
6款跨境电商常用工具汇总
Comprehensive analysis of FPGA basics
MQTT X Web:在线的 MQTT 5.0 客户端工具
伦敦银行情中短线的支撑和阻力位
联盟链技术应用的难点
How to match garbled characters regularly?
后台管理实现导入导出
下班后用微信处理工作时发病身亡,法院判决:工伤!
十位时间戳转化成时间
【集训DAY3】石油储备计划【树形DP】