2023华为OD 面试手撕代码真题【救生艇】

这篇博客分享了一道华为OD面试中出现的手撕代码题,涉及将人群按体重分配到船只上的问题,每艘船限载两人且总重量不超过limit。博主提出了贪心算法的解题思路,强调了读题细节的重要性,并提供了排序和双指针的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。

 

返回 承载所有人所需的最小船数 。

        这个题目和之前的机试题:租车骑绿岛,几乎一致,有兴趣的小伙伴可以搜一下我的博客看看。

        题目依然是面试官给到一个leetcode题号,然后让你直接去leetcode上做题,提交,看通过率。这个题目还是比较简单的,但是要注意读题。题目很重视细节。读题的时候每句话读完都要停顿三秒思考一下。这道题的关键就在于【每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit】

要使需要的船数尽可能地少,应当使载两人的船尽可能地多。

贪心算法流程:

设 people 的长度为 n。考虑体重最轻的人:

若他不能与体重最重的人同乘一艘船,那么体重最重的人无法与任何人同乘一艘船,此时应单独分配一艘船给体重最重的人。从 people 中去掉体重最重的人后,我们缩小了问题的规模,变成求解剩余 n−1 个人所需的最小船数,将其加一即为原问题的答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MISAYAONE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值