881. 救生艇 Medium

2024-06-10 15:44
文章标签 medium 881 救生艇

本文主要是介绍881. 救生艇 Medium,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给定数组 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的情况下计算承载所有人最少需要的船量。

分析:

(1)对people数组按升序排序,体重最轻的人若能与体重最重的人乘同艘船,则体重最轻的人可以与其他任何人同船,此时考虑两种情况:①体重最轻的人people[0]与体重最重的人people[N-1]同船;②体重最轻的人people[0]与体重较重的人people[k](0<k<N-1)同船;

(2)对于第一种情况的剩余人员是people[1:k-1]、people[k]、people[k+1:N-2],对于第二种情况的剩余人员是people[1:k-1]、people[k+1:N-2]、people[N-1],显然两种情况的剩余人员只有1个人不同,第一种情况是people[k],第二种情况是people[N-1],由于people[k]<=people[N-1],因此第一种情况的最少需要的船只<=第二种情况最少需要的船只;

(3)由(2)种结论可得,若最重的人可以与最轻的人同船时,将此二人放在同艘船上是最优解。

class Solution {
public:int numRescueBoats(vector<int>& people, int limit) {int N=people.size(),ans=0;sort(people.begin(),people.end());for(int l=0,r=N-1;l<=r;--r){if(people[l]+people[r]<=limit) ++l;++ans;}return ans;}
};

这篇关于881. 救生艇 Medium的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048578

相关文章

2288. 价格减免 Medium

句子 是由若干个单词组成的字符串,单词之间用单个空格分隔,其中每个单词可以包含数字、小写字母、和美元符号 '$' 。如果单词的形式为美元符号后跟着一个非负实数,那么这个单词就表示一个 价格 。  ·例如 "$100"、"$23" 和 "$6" 表示价格,而 "100"、"$" 和 "$1e5 不是。 给你一个字符串 sentence 表示一个句子和一个整数 discount 。对于每个表示价格

VLF inhomogeneous medium中实现RombergIntegral

首先进入Sorce Code Edit界面,这个默认用户已经掌握,如果不会,可以查看软件中的帮助文件。 首先。左侧中选择Snippet Body选项卡,然后在其中输入需要被积分的函数表达式,例如如下函数。 然后回到开始的Main Function选项卡中写程序调用该积分核函数并设定上下限即可。操作如下: 之后点击OK保存并回到主界面运行即可。

线性DP,状态优化,CF 958C2 - Encryption (medium)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 Problem - 958C2 - Codeforces 二、解题报告 1、思路分析 明显的dp 我们可以写一个会超时的朴素dp 状态定义 f[i][j]为前i个数字,划分为j组的最大收益 那么f[i][j] = max{ f[x][j - 1] + sum(

Leet Code Medium 18 4Sum

http://tech-wonderland.net/blog/summary-of-ksum-problems.html

Leet Code Medium 15 3Sum

【题目】 Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero. Note: Elements in a triplet

AI日报|Luma推出AI视频模型,又一Sora级选手登场?SD3 Medium发布,图中文效果改善明显

文章推荐 AI日报|仅三个月就下架?微软GPT Builder出局AI竞争赛;马斯克将撤回对奥特曼的诉讼 谁是最会写作文的AI“考生”?“阅卷老师”ChatGPT直呼惊艳! ⭐️搜索“可信AI进展“关注公众号,获取当日最新AI资讯 今日热点 Luma推出AI视频生成工具Dream Machine,120秒可生成120帧 今日北京时间0:00,Luma推出AI视频生成工具——Dream

Day 18:881. 救生艇

Leetcode 881. 救生艇 给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。 返回 承载所有人所需的最小船数 。 这里有一个条件,每艘船最多同时载两人,就变简单了。我考虑了载一个最重和最轻的人,然后还可以加一个稍微轻点的的人,这里就

​LeetCode解法汇总881. 救生艇

目录链接: 力扣编程题-解法汇总_分享+记录-CSDN博客 GitHub同步刷题项目: https://github.com/September26/java-algorithms 原题链接:. - 力扣(LeetCode) 描述: 给定数组 people 。people[i]表示第 i 个人的体重 ,船的数量不限,每艘船可以承载的最大重量为 limit。 每艘船最多可同时

419. 甲板上的战舰 Medium

给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一个空位 '.' ,返回在甲板 board 上放置的 战舰 的数量。 战舰 只能水平或者垂直放置在 board 上。换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)的形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一个水平或垂直的空位分隔 (即没有相邻的

Java数据结构与算法(leetcode热题881. 救生艇)

前言 救生艇属于贪心算法,解题之前条件一定要归纳好。题目中存在3个要求: 1.一艘船最多坐2人 2.船数要求最小 3.每艘船重量小于limit 意味着体重较轻的两人可以同乘一艘救生艇。 . - 力扣(LeetCode) 实现原理 1.重量大的有轻的可以配对,则可以配对同乘。 2.重量大的没有轻的可以配对,则单独乘。 3.涉及到轻重配对,最佳还是优先给予排序好的数据进行配对。