栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

881. 救生艇

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

881. 救生艇

给定数组 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

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/boats-to-save-people
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

算法分析:

1.将数组排好序(因为这样可以具有单调性)

2.双指针,一前一后(看一个体重轻的和一个体重重的小不小于等于船承重)

         2.1.<= : l++,r--;

        2.2. > : r--;

java:

class Solution {
    public int numRescueBoats(int[] people, int limit) {
        Arrays.sort(people);
        int l=0;
        int r=people.length-1;
        int ans = 0;
        while(l<=r){
            if(people[l]+people[r]<=limit){
                l++;
            }
            r--;
            ans++;
        }
        return ans;
    }
}

C语言:

void swap(int q[],int i,int j){
	int t=q[i];
	q[i]=q[j];
	q[j]=t;
}
void quickSort(int q[],int l,int r){
	if(l>=r) return ;
	int i=l-1;
	int j=r+1;
	int x=q[(r-l)/2+l];
	while(ix);
		if(i 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/869028.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号