2024年美团秋招第四轮笔试编程题第2题

小美请工人在一条无限长的公路上种树,每个工人只能在自己位置和自己右边位置依次种树,每个位置只能种1棵树,每个工人种树数量都相等为k,工人总数为n,小美希望种下的树的总数至少是m,本题第一行将输入两个数字(以空格隔开),分别是工人数量n、小美希望种下树的总数m,第二行将输入表示工人位置的数字序列(以空格隔开),求出每个工人种树数量k的最小值。

示例如下

输入:

3 6

1 2 4

输出:3 。即工人1在位置1,在1、2、3号位种树;工人2在位置2,在2、3、4号位种树;工人3在位置4,在4、5、6号位种树。不存在比3更小的种树数量了。

我当时以为自己做出来了,测试用例也通过了,但提交之后却是错的,求问各位有思路分享吗?

更新:复现了当时的代码,发现是排序后取值边界的细节搞错了,明明思路想对了然而白白扣掉40分

// 美团2024秋招第四轮笔试编程题2 -- 种树
// https://www.nowcoder.com/discuss/659520408298782720
// 工人总数,要求种下的树的总数,工人位置数组  :  返回值是 每个工人最小种树数量
function plantTree(workerNum, treeNum, positions) {
  let distance = []
  for (let i = 0; i < workerNum - 1; i++) {
    distance.push(positions[i + 1] - positions[i])
  }
  distance = distance.sort() // distance有 workerNum - 1 项
  // 首先计算当前若不考虑最后一个工人种树数量,其余工人最多能种下多少树
  const total = distance.reduce((a, b) => a + b, 0)
  let lastindex = 0 // 记录上一次遍历是从哪个索引开始的
  for (let answer = Math.ceil(treeNum / workerNum); ; answer++) {
    let index = lastindex
    while (index < workerNum - 1 && distance[index] < answer) {
      index++
    }
    lastindex = index
    if (index >= workerNum - 1) {
      // 此时,说明每个工人种树数量已经超过了工人之间距离的最大值,故直接计算出每个工人要种树数量即可
      return treeNum - total
    } else {
      let tempTotal = 0
      for (let j = 0; j < index; j++) {
        tempTotal += distance[j]
      }
      // 如果此时,种树重叠了的工人种下的树,加上没有重叠的工人种下的树的总数,达到要求,就返回值
      if (tempTotal + (workerNum - index) * answer >= treeNum) {
        return answer
      }
    }
  }
}

#美团求职进展汇总##24届秋招同行攻略分享##你的秋招进行到哪一步了##你的秋招进展怎么样了##你觉得今年秋招难吗#
全部评论
要对position排序
点赞 回复 分享
发布于 08-31 22:30 北京
排序,剔除种树区间重复的工人,通过100%
点赞 回复 分享
发布于 08-31 22:55 吉林
小红书
校招火热招聘中
官网直投
对 要对工人的位置坐标排序 我的思路就是暴力枚举最少的中秋长度,变量 i 从 k/n 开始枚举,然后用一个大小为 max(工人位置)+i 的数组存储是否已经被种树(用 1 表示) 一旦这个数组中 1 的数据>=k 那就直接输出答案停止运行
点赞 回复 分享
发布于 09-01 07:38 山西
做对俩编程 40 分,选择题不知道能对多少 ,不够 60 分给面试机会吗
点赞 回复 分享
发布于 09-01 07:39 山西

相关推荐

09-06 09:52
已编辑
广东轻工职业技术学院 Java
一开始给纸让我写算法,我写了一下直接不写,过去跟他说我算法有奖,我跟你说思路就行了(😂😂逆天题,那个题真的逆天吧,我真觉得说思路就可以了,谁那么无聊手写)可能是为了筛选那些完全不会的吧……小公司是这样的然后说不跟我聊算法那些,跟我聊简历上的东西,果然那个题是筛选沙北的,直接过去大大方方聊就行了Mysql用过吧……&nbsp;&nbsp;不知道为啥问我这个底层了解过吗 b➕树mysql的主从搭建过是docker搭建过mysql的主从同步实现读写分离分布式弄过吧注册中心用的啥主要用nacos和学过eureka,用zookeeper搭建过kafka集群被嫌弃了😂,说我只会nacos啊……redis用过吧,缓存那些,缓存击穿……叫我别聊那些八股,那些都背熟了让我弄个秒杀场景我说成了异步下单➕兜底策略吧hhh,没想到只是单纯问redis,但是他说我描述的很片面,不全面分布式弄过吧弄过springcloud,远程调用多节点弄过吗我说是多模块?还是部署到不同服务器上,他说是部署到不同服务器上,我说没试过redis的哨兵搭建过吧叭叭叭叭叭叭……mysql的主从库同步后宕机了怎么办,怎么恢复不会……,只弄过主从同步,没弄过这个如果想让mysql的主从库保证强一致性该如何我说的是全同步复制,然后解释了一下全同步复制和半同步复制的区别,感觉弄错了redis的数据同步弄过吧没,只弄过哨兵➕主从mysql的异地同步知道怎么弄吗?不知道,我是用navicat把sql弄出来再弄到另一个库的😂😂。他说这个不算然后就是闲聊知道现在的就业环境吗?为什么要选java这个方向?未来是什么规划?然后问我有没有投过中大厂,可以试试中厂有什么想问他的方向和技术就说java技术栈那套,spring那些,还可能有大数据的我说es?他说日志那些,那我说我知道那是elk……其实感觉真没面啥,可能是小公司吧,这个人面试的时候比我还紧张hhhh,然后我因为是上午约了下午直接跑到深圳的,所以八股是临时复习,偶尔也口吃了和背错了。哎来回200车费弄个面试……我太难了😭😭——————————————————隔了一星期多再评价一次,如果让你线下的小公司还让你手写题你直接走就是了,别浪费时间。当时面试的时候面试我的人比我还紧张,问一些有用没有的问题,明显就没准备招人的问题。只能说真的逆天浪费时间,沙北外包赶紧爬 #实习,投递多份简历没人回复怎么办# #面试# #拷打#
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务