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。问要多少个包。

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

被折叠的 条评论
为什么被折叠?



