微信改版,加星标不迷路!

每日一算法-救生艇

第 i 个人的体重为 people[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 <= 50000

  • 1 <= people[i] <= limit <= 30000

解析

思路

如果最重的人可以与最轻的人共用一艘船,那么就这样安排。否则,最重的人无法与任何人配对,那么他们将自己独自乘一艘船。

这么做的原因是,如果最轻的人可以与任何人配对,那么他们也可以与最重的人配对。

算法

令 people[i] 指向当前最轻的人,而 people[j] 指向最重的那位。

然后,如上所述,如果最重的人可以与最轻的人共用一条船(即 people[j] + people[i] <= limit),那么就这样做;否则,最重的人自己独自坐在船上。

实现代码

class Solution {public:   int numRescueBoats(vector<int>& people, int limit) {       //printf("%d",people[0]);       sort(people.begin(),people.end());       int num = 0; // 船的个数       int i = 0 ;        int j = people.size()-1;       while(i<=j){           num++;           if(people[i] + people[j] <=limit){               i++;           }           j--;       }       return num;   }};

需要注意的地方

本题的难点:最轻的和最重的相匹配,然后巧妙的使用贪心算法解决了此问题。多思考,多想解决方案,总有一天我们会变摩托,加油!

今日问题

在计算机领域,你认为考研有必要吗?

打卡格式:打卡第n天,答:...

为什么打卡?戳下面你就知道了!

21/天/养/一/个/好/习/惯

【每日一算法】救生艇相关推荐

  1. 【每日一算法】对称二叉树

    每日一算法-对称二叉树 题目 给定一个二叉树,检查它是否是镜像对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1   / \  2   2 / \ / \ 3  4 4  3 但是 ...

  2. 【每日一算法】使用二分法解决x 的平方根问题

    每日一算法-x 的平方根 题目 实现 int sqrt(int x) 函数. 计算并返回 x 的平方根,其中 x 是非负整数. 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去. 示例 1: ...

  3. 【每日一算法】二叉树的层次遍历 II

    每日一算法-二叉树的层次遍历 II 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,n ...

  4. 【每日一算法】最大子序列和

    每日一算法-最大子序列和 题目 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4] ...

  5. 【每日一算法】杨辉三角 II

    每日一算法-杨辉三角 II 题目 给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 3 输出: [1,3,3,1] ...

  6. 【每日一算法】杨辉三角到底是什么?

    每日一算法-杨辉三角 题目 给定一个非负整数 numRows,生成杨辉三角的前 numRows 行. 在杨辉三角中,每个数是它左上方和右上方的数的和. 示例: 输入: 5 输出:[     [1], ...

  7. 【每日一算法】二叉树的最小深度

    每日一算法-二叉树的最小深度 题目 给定一个二叉树,找出其最小深度. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量. 说明: 叶子节点是指没有子节点的节点. 示例: 给定二叉树 [3,9,2 ...

  8. 【每日一算法】合并两个有序数组

    每日一算法-搜索插入位置 题目 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组. 说明: 初始化 nums1 和 nums2 ...

  9. 【每日一算法】平衡二叉树

    微信改版,加星标不迷路! 每日一算法-搜索插入位置 作者:阿广 阅读目录 ? 题目 ? 解析 ? 完整代码 1 题目 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: ...

最新文章

  1. 学术报告 | 模拟液态和薄结构之间相互作用的多尺度模型
  2. linux下,redis 3.2.1双节点集群安装部署
  3. c++编辑器_盘点四款PDF编辑器,使用它们,编辑PDF文件没问题!
  4. python opencv resize函数_Python OpenCV中的resize()函数的使用
  5. 微软小冰评分接口_微软小冰测颜值准不准?郑爽才得6.3分,较真你就输了
  6. jupyter-使用及设置密码
  7. 《程序员代码面试指南》第二章 链表问题 搜索二叉树转换为双向链表
  8. 仪表盘怎么调 铃木uy125摩托车_平时市区骑行,摩托车链条多久保养一次?
  9. spring boot 调试 - 热部署
  10. [Java]一步一步学 Web
  11. UVA10523 Very Easy !!!题解
  12. dom4j 解析xml文件demo
  13. 利用FbinstTool制作多系统(winPE+Ubuntu+CDLinux)启动U盘
  14. OKHTTP深入浅出(二)----基本用法
  15. matlab绘制雷达图
  16. 物联时代,二维码技术在各行业有哪些应用?
  17. 关于使用迅雷下载百度云盘文件的教程
  18. HikariPool-1 - Exception during pool initialization. Could not create connection
  19. Linux 之系统美化
  20. Spring——事物操作

热门文章

  1. 7000 字 23 张图,Pandas一键生成炫酷的动态交互式图表
  2. 从样本处理到决策模型,如何用NLP识别盗版资源?
  3. 多线程批量拆分List导入数据库
  4. 面试官:说说RabbitMQ 消费端限流、TTL、死信队列
  5. SpringCloud 2020版本教程4:使用spring cloud sleuth+zipkin实现链路追踪
  6. 干掉 powerdesigner,设计数据库表用它就够了
  7. 新技能 MyBatis 千万数据表,快速分页!
  8. 为什么阿里巴巴要禁用 Executors 创建线程池?
  9. 面试官:你说你精通 Docker,那你来详细说说 Dockerfile 吧
  10. “干掉” Date,Java8 LocalDate 真香!