当前位置: 首页> 新闻> 资讯 > ​LeetCode解法汇总881. 救生艇

​LeetCode解法汇总881. 救生艇

时间:2025/9/9 18:01:22来源:https://blog.csdn.net/AA5279AA/article/details/139608507 浏览次数:0次

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:. - 力扣(LeetCode)


描述:

给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit

每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit

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

示例 1:

输入:people = [1,2], limit = 3
输出:1
解释:1 艘船载 (1, 2)

示例 2:

输入:people = [3,2,2,1], limit = 3
输出:3
解释:3 艘船分别载 (1, 2), (2) 和 (3)

示例 3:

输入:people = [3,5,3,4], limit = 5
输出:4
解释:4 艘船分别载 (3), (3), (4), (5)

提示:

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

解题思路:

使用贪心算法+双指针。

首先对体重进行排序,因为该题与顺序无关。

如果右指针指向的位置的人的重量大于等于limit,则右指针向左移动;

如果右指针指向的位置的人的重量小于limit,则与左指针指向的位置的人的重量进行累加,如果之和大于limit,则右指针向左移动;

如果之和小于等于limit,则说明可以装下两个人,则右指针向左移动,左指针向右移动。

当左指针的位置大于右指针时,循环结束。此时如何两者重合,则仅使用右指针的值即可。

代码:

class Solution881
{
public:int numRescueBoats(vector<int> &people, int limit){sort(people.begin(), people.end());int leftIndex = 0;int rightIndex = people.size() - 1;int count = 0;while (leftIndex <= rightIndex){if (leftIndex == rightIndex){count++;break;}if (people[rightIndex] >= limit || people[rightIndex] + people[leftIndex] > limit){rightIndex--;count++;continue;}rightIndex--;leftIndex++;count++;continue;}return count;}
};

关键字:​LeetCode解法汇总881. 救生艇

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: