leetcode 881. Boats to Save People(救生船)

这篇博客探讨了一个经典的算法问题,即如何用最少的船只将一组人渡过河,每个人都有不同的重量,每艘船的最大载重有限。通过排序和双指针策略,可以有效地解决这个问题。双指针从数组的两端开始,优先让较重的人上船,如果重量不超过限制,则移动轻的一端指针。该方法确保了在满足条件的情况下使用最少的船只。

You are given an array people where people[i] is the weight of the ith person, and an infinite number of boats where each boat can carry a maximum weight of limit. Each boat carries at most two people at the same time, provided the sum of the weight of those people is at most limit.

Return the minimum number of boats to carry every given person.

Example 1:

Input: people = [1,2], limit = 3
Output: 1
Explanation: 1 boat (1, 2)

Example 2:

Input: people = [3,2,2,1], limit = 3
Output: 3
Explanation: 3 boats (1, 2), (2) and (3)

Example 3:

Input: people = [3,5,3,4], limit = 5
Output: 4
Explanation: 4 boats (3), (3), (4), (5)

Constraints:

1 <= people.length <= 5 * 104
1 <= people[i] <= limit <= 3 * 104

有限个人,无限个船,people数组中的元素表示人的重量,
一个船最多坐俩人,且不能超重,重量限制在limit。
问多少个船能把所有人渡过河。

思路:
简言之就是背包问题,一个包里面最多放俩数字,数字之和<=limit。问要多少个包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

蓝羽飞鸟

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

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

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

打赏作者

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

抵扣说明:

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

余额充值