当前位置: 首页 > news >正文

广州网站建设论坛做鞋用什么网站好

广州网站建设论坛,做鞋用什么网站好,大型农村电商平台,湖北做网站教程哪家好力扣 781. 森林中的兔子 中等 前言一、题目内容二、解题方法1. 哈希函数(来自评论区大佬的解题方法)2.官方题解2.1 方法一:贪心 前言 这是刷算法题的第十六天,用到的语言是JS 题目:力扣 781. 森林中的兔子 (中等) 一、…

力扣 781. 森林中的兔子 中等

  • 前言
  • 一、题目内容
  • 二、解题方法
    • 1. 哈希函数(来自评论区大佬的解题方法)
    • 2.官方题解
      • 2.1 方法一:贪心


前言

这是刷算法题的第十六天,用到的语言是JS
题目:力扣 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:

输入:answers = [1,1,2]
输出:5
解释:
两只回答了 “1” 的兔子可能有相同的颜色,设为红色。
之后回答了 “2” 的兔子不会是红色,否则他们的回答会相互矛盾。
设回答了 “2” 的兔子为蓝色。
此外,森林中还应有另外 2 只蓝色兔子的回答没有包含在数组中。
因此森林中兔子的最少数量是 5 只:3 只回答的和 2 只没有回答的。
示例 2:

输入:answers = [10,10,10]
输出:11

提示:

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

二、解题方法

1. 哈希函数(来自评论区大佬的解题方法)

挺好想的吧,第i个兔子回答有x个相同的亲兄弟,加上它自己,这种兔子至少有x + 1个,当第j个兔子也回答有x个亲兄弟时,其实就两种情况:

  1. 第j个兔子和第i个兔子同属一个阵营,它们互为亲兄弟
  2. 第j个兔子和第i个兔子不属于同一个阵营,它们不是亲兄弟

下面具体分析:
当有兔子回答x时,一定存在一个最多容纳x+1个兔子的兔子阵营,且同属于一个阵营的兔子的回答都是一样的,都是x,因此我们记录有多少只兔子回答了x,即mp[x] = y就表示有y只兔子回答了 x
解释为:一个最多容纳x+1只兔子的兔子阵营,找到了y只兔子在这个阵营中,y == 1表示这个阵营第一次出现,而当y == x + 1时表示这个阵营已经满了,后续还有兔子回答x时已经是另一个新阵营的兔子了,咱们只在y == 1时收集答案,即只出现新阵营时才收集答案,这样就避免了重复计算了和漏计算

代码如下(示例):

/*** @param {number[]} answers* @return {number}*/
var numRabbits = function (answers) {// 哈希表?let count = 0const map = new Map()for (const x of answers) {// 记录当前答案出现的次数, 一开始是0,首次添加时为1map.set(x, (map.get(x) || 0) + 1)if (map.get(x) > x + 1) map.set(x, 1) // 产生了新的颜色阵营if (map.get(x) === 1) count += x + 1 // 出现新阵营 或者 答案次数只有1的话,就加上阵营的兔子数量// 补充,为什么两个if调换顺序就出问题// 调换后,错误的新增计数: // 假设某个颜色(兔子回答) x 的出现次数当前为 x + 1,而这时有另一个兔子也说 x。因为我们先检查了 map.get(x) === 1,会在这个时候错误地将这个阵营的数量加到 count 中,即使它实际上应该被标记为已满。// 没有正确重置计数:// 如果没有首先检查是否超过最大次数(x + 1),那么我们就无法及时重置计数为 1,而是错误地累加到现有计数基础上,这会导致最终的计数不准确,增加了不该计数的兔子。}return count
}

2.官方题解

2.1 方法一:贪心

cv

代码如下(示例):

var numRabbits = function(answers) {const count = new Map();for (const y of answers) {count.set(y, (count.get(y) || 0) + 1);}let ans = 0;for (const [y, x] of count.entries()) {ans += Math.floor((x + y) / (y + 1)) * (y + 1);}return ans;
};作者:力扣官方题解
链接:https://leetcode.cn/problems/rabbits-in-forest/solutions/698444/sen-lin-zhong-de-tu-zi-by-leetcode-solut-kvla/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
复杂度分析:
时间复杂度: O ( n ) O(n) O(n),其中 n n n 是数组 a n s w e r s answers answers 的长度。
空间复杂度: O ( n ) O(n) O(n)。最坏情况下,哈希表中含有 n n n 个元素。

链接:力扣本题官方题解
来源:力扣(LeetCode)

http://www.dtcms.com/a/433525.html

相关文章:

  • 网站admin目录名怎么改广州的房地产网站建设
  • 做王境泽gif的网站注册公司网站模板下载
  • 网站和平台有什么区别做链接的网站
  • 四川网站排名廊坊市建设银行网站
  • 微盟网站模板电脑制作视频的软件有哪些
  • 红酒公司的网站建设wordpress打开很卡
  • 做游戏网站选服务器承德市建设局网站
  • 自己做网站导航做任务领佣金的网站源码
  • 沧州网站建设价格遵义seo网络优化招聘
  • 象山县城乡和住房建设局网站建站系统软件有哪些
  • 成都专业做游戏网站空白word个人简历模板下载
  • 手机网站模板下载设计广告网站
  • 做啥网站流量高新手如何做网上销售
  • 学做网站需要多长时间佛山做公司网站
  • 太原论坛网站开发公司好玩的网页
  • 织梦网站上传路径不对竞价托管公司
  • 咚咚抢网站怎么做的做100个网站效果
  • 外贸网站建设的意义废品回收在哪个网站做效果好
  • 织梦dedecms导航网站源码做防护用品的网站
  • 重庆建设机电网站广东个人备案网站内容
  • 做设计的网站中英文 wordpress
  • 网站建设所需要的内容可信验证网站
  • 昆明网站开发推广电子商务网站建设感想
  • 怎样创建一个网站wordpress分页问题
  • 男女一起做暖暖网站通过备案号查网站
  • 深圳网站建站建设解析视频的网站怎么做
  • 做亚马逊有什么网站可以借鉴wordpress取消伪静态后内页500
  • 领先的手机网站设计汽车网站营销
  • 建个人网站怎么赚钱吗广告版面设计图片
  • 网站的备案信息中国住房和城乡建设部网站公文