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

相关文章

Leetcode 152. 乘积最大子数组(Medium)

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续  子数组 (该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 测试用例的答案是一个 32-位 整数。 示例 1: 输入: nums = [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。 示例 2: 输入: nums = [-2,0,-1]输出: 0解释: 结果不能为 2,

Linux 挂载须知: mount 一些小问题 mount: no medium found on /dev/sr0

我属于window+VM+ubuntu的配置,有时需要把windows上的文件,挂载到虚拟机上去。然后每次使用命令的时候会出现如下的问题:                其实解决问题很简单,但是由于我自己的粗心而花费了很长的时间:    这个时候一定要确认,虚拟机的设置处是否勾选了   具体如下图所示:                 然后按照  如下的命令:   mount

leetcode解题思路分析(一百零三)881 - 887 题

救生艇 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit。每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit。返回载到每一个人所需的最小船数。(保证每个人都能被船载)。 贪心算法:双指针滑动,如果最轻+最重可以坐得下,则一起走,否则把最重的人先驮走 class Solution {public:int numRescueBoats(vector

[Meachines] [Medium] Lightweight LDAP密码嗅探+TRP00F 自动化权限提升+openssl 权限提升

信息收集 IP AddressOpening Ports10.10.10.119TCP:22,80,389 $ nmap -p- 10.10.10.119 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 7.4 (protocol 2.0)| ssh-hostkey:|

[Meachines] [Medium] Bitlab 标签自动填充登录+GitLab+Docker横向+Postgresql+逆向工程

信息收集 IP AddressOpening Ports10.10.10.114TCP:22,80 $ nmap -p- 10.10.10.114 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; pr

[Meachines] [Medium] SecNotes XSRF跨站请求伪造+SMB-Webshell上传+Linux子系统命令历史记录泄露权限提升

信息收集 IP AddressOpening Ports10.10.10.97TCP:80,445,8808 $ nmap -p- 10.10.10.97 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION80/tcp open http Microsoft IIS httpd 10.0| http

[Meachines] [Medium] Bastard Drupal 7 Module Services-RCE+MS15-051权限提升

信息收集 IP AddressOpening Ports10.10.10.9TCP:80,135,49154 $ nmap -p- 10.10.10.9 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION80/tcp open http Microsoft IIS httpd 7.5| http-methods:

[Leetcode 230][Medium] 二叉搜索树中第 K 小的元素-大根堆/优先队列/DFS深度优先搜索

目录 一、题目描述 二、整体思路 三、代码 一、题目描述 题目地址 二、整体思路         大根堆/优先队列         看到第K小的元素(Top K)问题,第一时间想到快速排序/大根堆/优先队列。比较简单的思路是把所有结点加入到优先队列,然后重复出队列操作使得队列中元素数量为k,此时队首元素即为第K小的元素。优先队列的数据结构是大根堆,在遇见比堆顶小的元

2288. 价格减免 Medium

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

VLF inhomogeneous medium中实现RombergIntegral

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