华为机试二星题--导师请吃火锅

标题: 导师请吃火锅 | 时间限制: 1秒 | 内存限制: 262144K | 语言限制: 不限
入职后,导师会请你吃饭,你选择了火锅。
火锅里会在不同时间下很多菜。
不同食材要煮不同的时间,才能变得刚好合适。你希望吃到最多的刚好合适的菜,但是你的手速不够快,用m代表手速,每次下手捞菜后至少要过m秒才能再捞(每次只能捞一个)。
那么用最合理的策略,最多能吃到多少刚好合适的菜?

这道题我觉得有个误区,就是要不要夹第一道菜,我认为是一定要夹的,原因如下:
如果担心夹了第一道菜无法夹后面的菜,假设后面不能夹起的最后一道菜在列表中的下标是i,那么不夹第一道菜就是为了夹起这第i道菜,假设不夹第一道(此时下标为0),夹第i道,那第i+1道菜如果能夹起,那么不夹第i道菜而夹第1道菜是一定能夹起第i+1道菜的,但是不夹第1道菜而夹第i道菜不一定能夹起第i+1道菜。所以直接夹第一道,代码就很简单了,用python3
n,m=map(int,input().split())
d=set()
for i in range(n):
    d.add(sum(map(int,input().split())))
l=sorted(list(d))
count=1
t=0
for i in range(1,len(l)):
    if l[i]-l[t]>=m:
        count+=1
        t=i
print(count)


#华为##华为笔试#
全部评论
吃个火锅这么麻烦的?不吃了
5
送花
回复
分享
发布于 2022-11-23 09:30 香港
把每个菜刚好合适的时间算出来,然后贪就完了
2
送花
回复
分享
发布于 2022-11-04 00:40 湖北
滴滴
校招火热招聘中
官网直投
public static void main(String[] args) { Scanner sc = new Scanner(System.in); String s = sc.nextLine(); findLengthOfHuiWenZiChuan(s, 4); } public static void huoGuo(String[] args) { //火锅 int[][] arr = new int[][]{{1, 2}, {2, 1}}; answer(arr, 1); } public static void answer(int[][] arr, int m){ //定义一个数组, int[] timeAndReady = new int[arr.length]; for (int i = 0; i < arr.length; i++) { timeAndReady[i] = arr[i][0] + arr[i][1]; } Arrays.sort(timeAndReady); int count = 0; int timeCount = 0; for (int i = 0; i < arr.length; i++) { if (m <= timeAndReady[i] - timeCount){ count++; timeCount = timeAndReady[i]; } } System.out.println(count); }
点赞
送花
回复
分享
发布于 2023-09-13 23:26 广东

相关推荐

4 15 评论
分享
牛客网
牛客企业服务