华为OD南京研究所二面手撕代码实录:乘电梯的最短时间

乘电梯的最短时间

某公司,每天早上都有很多人去坐电梯,每个人都可能到不同的楼层.同时电梯还有一个容量限制.电梯最多只能带K个人.电梯从第a层到第b层,会花费|a-b|的时间.
现在有N个人,以及知道每个人想要去的地方,请问如何坐电梯,才能使每个人到达到他们对应的楼层,且所花费时间最少.电梯最后要会到第1层.

输入
对于每个输入文件,先输入两个整数N,K.表示有N个人,以及电梯的容量K.
接下来一行,有N个整数,f1, f2, … , fn. 表示每个人要到达的地方.
(1 <= N, K <= 2000, 1 <= fn <= 2000)

思路:

最重要的核心思路就是让楼层最高的带上剩下的人中楼层高的人,这样的话用的时间是最少的,所以我们直接排个序,按照K来分组,每个组所花费的时间就都是 (最大楼层-1)*2的时间了,最后累加K组即可。
比如3个人,电梯容量为2,目标楼层分别是: 1,10,9 这样我们肯定是要让10和9一起上去,这样10就覆盖了9所花费的时间,这样就能达到最节省时间的目的

java代码
import java.util.

你可能感兴趣的:(华为od,windows)