巨硬校招第一次笔试 6号

1、给定预算,最大的填坑长度

...xxx...x..xxx 给定7,返回5,解读:第一个长坑3,填完开销是4;第三个长坑,仅能填2长度,花光剩下的3;

'x'表示坑,n 长度的坑的填坑代价是 n+1 ,则给定 k 预算下,最大的填坑长度;

解题思路:
堆+贪心
每一轮选出最长的坑(大根堆)中,根据预算可以填上的长度,
理由是:保证代价中多余的1在整体代价中占比最小,就是贪心的基本思路;

2、数组中的所有红球贴贴需要的最小交换次数

WWWRRWRWR -> WWWRRWRRW -> WWWRRRWRW-> WWWRRRRWW
'W'指白球,'R'指红球;仅可相邻位置交换;

解题思路:
模拟 + 前缀和

  1. 首先遍历找到所有红球的位置,并保存到数组pos中;
  2. 计算前缀和数组pre[],其中每个位置i对应值,指的是 当把i位置之前的所有红球和i位置的红球紧挨所需要的步数
    pre[i] = pre[i - 1] + (pos[i] - pos[i - 1] - 1) * i;
  3. 计算前缀和数组post[],其中每个位置i对应值,指的是 当把i位置之后的所有红球和i位置的红球紧挨所需要的步数
    post[i] = pre[i + 1] + (pos[i + 1] - pos[i] - 1) * (len - i);
  4. 迭代一遍,计算最小的pre[i]+post[i];

3、患者能否全都能看上病

医生的预约时间是1~S,每个患者i对应两个时间点可以就医,分别存放在t1[i] , t2[i],且时间点均位于1~S之间,患者个数等于时间点个数,
当前患者的预约安排是否能全部就诊?

解题思路:
二分图匹配问题,匈牙利算法,患者和时间点的一一对应是否存在;
Tips:患者个数的规模是100000,初步判断DFS会超时;

全部评论
第三问感觉没那么麻烦吧? 只要看1~s这s个时间点里是否存在哪个时间点没被预约过就能判断了吧?因为题目没有要求你给可行解啊? 你想啊,这就是一个萝卜一个坑嘛,萝卜数和坑数是能对上的,如果有人安排不了,那肯定就有一个坑会被空出来,也就是说,这个坑没被预约过。 所以,只要确保每个时间点都被人预约过,那自然就一定能安排下所有人吧?
点赞 回复
分享
发布于 2022-08-17 00:35 广东
这三道题给了多长时间
点赞 回复
分享
发布于 2022-08-10 11:38
阅文集团
校招火热招聘中
官网直投

相关推荐

3 6 评论
分享
牛客网
牛客企业服务