赞
踩
给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。
返回 承载所有人所需的最小船数 。
这个题目和之前的机试题:租车骑绿岛,几乎一致,有兴趣的小伙伴可以搜一下我的博客看看。
题目依然是面试官给到一个leetcode题号,然后让你直接去leetcode上做题,提交,看通过率。这个题目还是比较简单的,但是要注意读题。题目很重视细节。读题的时候每句话读完都要停顿三秒思考一下。这道题的关键就在于【每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit】
要使需要的船数尽可能地少,应当使载两人的船尽可能地多。
贪心算法流程:
设 people 的长度为 n。考虑体重最轻的人:
若他不能与体重最重的人同乘一艘船,那么体重最重的人无法与任何人同乘一艘船,此时应单独分配一艘船给体重最重的人。从 people 中去掉体重最重的人后,我们缩小了问题的规模,变成求解剩余 n−1 个人所需的最小船数,将其加一即为原问题的答案。
若他能与体重最重的人同乘一艘船,那么他能与其余任何人同乘一艘船,为了尽可能地利用船的承载重量,选择与体重最重的人同乘一艘船是最优的。从 people 中去掉体重最轻和体重最重的人后,我们缩小了问题的规模,变成求解剩余 n−2 个人所需的最小船数,将其加一即为原问题的答案。
在代码实
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。