2021.4.10 滴滴笔试编程

一、
优秀的操作系统离不开优秀的任务调度算法。现在,有一台计算机即将执行n个任务,每个任务都有一个准备阶段和执行阶段。
只有在准备阶段完成后,执行阶段才可以开始。同一时间,计算机只能执行一个任务的执行阶段,同时可以执行任意多个任务的准备阶段。
请你设计一个算法,合理分配任务执行顺序,并输出完成所有任务的最少时间。

第一行一个整数n表示任务的数量(1<=n<=5*10^4)

接下来n行每行两个整数a,b表示第i个任务的准备时长和执行时长。(1<=a,b<=10^9)

答:按准备时间从小到大排序,一样则按执行时间从大到小排序,一句话就是尽量处于执行状态

二、
小A的家门口有一排树,每棵树都有一个正整数的高度。由于树的高度不同,来到小A家的朋友都觉得很难看。
为了将这些树高度变得好看,小A决定对其中某些树施展魔法,具体来说,每施展一次魔法,可以把一棵树的高度变成任意正整数(可以变高也可以变低)。
小A认为,这排树如果能构成等差为x的等差数列就好看了。但是小A不想施展太多次魔法,他想知道最少施展魔法的次数。

输入第一行包含两个正整数,n和x,含义如题面所示。
输入第二行包含n个正整数,第i个数的含义为第i棵树的高度ai
输出包含一个正整数,即小A最少施展魔法的次数

范围:n≤10^5, 1≤ai≤10^5, x≤1000

(通过64%)超时:定义访问数组,对每一颗树固定高度访问其他的树,如果其他的树的高度符合等差的要求,之后就不必在访问那棵树了,记录不符合的树的数量,去所有不符合数量中最小的那个。
有大佬指点一下应该怎么写比较好吗?


#校招##滴滴##Java工程师##笔经#
全部评论
第二题可以根据等差公司 n*i + d, 然后统计数列里面d最多的次数,就可以确定这个数列里面固定不变的元素数量,然后直接n-maxLen即可。 复杂度是O(n)
2 回复 分享
发布于 2021-04-10 22:15
1 回复 分享
发布于 2021-04-10 22:24
第一题,为什么准备时间相等还要执行时间从大到小在排一次呀??
点赞 回复 分享
发布于 2021-04-12 10:33

相关推荐

11-03 14:38
重庆大学 Java
AAA求offer教程:我手都抬起来了又揣裤兜了
点赞 评论 收藏
分享
点赞 5 评论
分享
牛客网
牛客企业服务