本文主要是介绍华为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南京研究所二面手撕代码实录:乘电梯的最短时间的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!