题目

LeetCode881:救生艇
第 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)

题解

C++实现

  • 调用系统排序方法,sort(people.begin(), people.end());
#include <iostream>
#include <vector>using namespace std;class Solution {
public:int numRescueBoats(vector<int>& people, int limit) {sort(people.begin(), people.end());int num = 0;for (int i = 0,j=people.size()-1; i<=j; j--) {if (people[i]+people[j]<=limit) {i++;}num++;}return num;}
};int main(int argc, const char * argv[]) {Solution test;vector<int> people = {2,49,10,7,11,41,47,2,22,6,13,12,33,18,10,26,2,6,50,10};int n = test.numRescueBoats(people, 50);cout << n;return 0;
}

C实现

//堆排序

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>void swap(int* a,int *b){int tmp = *b;*b = *a;*a = tmp;
}
//初始化堆
void adjustHeap(int a[],int i,int n){int child;        //孩子结点int temp;          //临时变量/*对堆进行整理*/for(temp = a[i]; i * 2 + 1 < n; i = child){child = i * 2 + 1;                                 //当前结点的左孩子结点if(child  != n - 1 && a[child] < a[child + 1])  //比较左孩子和右孩子谁大child++;if(temp < a[child])a[i] = a[child];elsebreak;}a[i] = temp;
}//堆排序
void myheapSort(int nums[],int n){//初始化堆,构建最大堆for(int i=n/2;i>=0;i--){ //从最后一个非终端节点开始,由下向上adjustHeap(nums, i, n);}//进行堆排序for (int i=n-1; i>=0; i--) {swap(&nums[0], &nums[i]);adjustHeap(nums, 0, i);}
}int numRescueBoats(int* people, int peopleSize, int limit) {myheapSort(people,peopleSize);for(int i=0;i<peopleSize;i++){printf("%d ",people[i]);}int i=0,j=peopleSize-1,n=0;for (; i<=j; j--,n++) {if (people[i]+people[j]<=limit) {i++;}}return n;
}int main(int argc, const char * argv[]) {int people[4] = {3,5,3,4};int n = numRescueBoats(people, 4 ,5);return 0;
}

LeetCode881:救生艇 (C、C++实现)相关推荐

  1. LeetCode881. 救生艇

    LeetCode881. 救生艇 1. 问题描述 2. 思路 反相双指针 3. 代码 func numRescueBoats(people []int, limit int) int {sort.In ...

  2. leetcode881. 救生艇(贪心算法加双指针)

    第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保证每个人都 ...

  3. Leetcode--881. 救生艇

    第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. 返回载到每一个人所需的最小船数.(保证每个人都 ...

  4. leetcode881.救生艇(中等)

    思想:贪心 尽量让载2人的船最多,由大到小排序,最大的尽量和最小的坐一艘船,此时对于最小重量来说是最优的 class Solution {public:int numRescueBoats(vecto ...

  5. leetcode-881 救生艇

    思路:sort + 双指针: 疑问:就是问什么可以直接选择最小的放入船里面,而不是找到最大容量的情况:因为,船的个人只有2个人,最大重量已经拿出来了,就算能找到一个最合适的重量,那么其他次大重量也是无 ...

  6. 救生艇(双指针)-C语言

    救生艇(双指针) #include <stdio.h>void quick_sort(int *a, int left, int right); int numRescueBoats(in ...

  7. 【每日一算法】救生艇

    微信改版,加星标不迷路! 每日一算法-救生艇 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多为 limit. ...

  8. leetcode每日一题系列——881. 救生艇

    881. 救生艇 难度中等166收藏分享切换为英文接收动态反馈 第 i 个人的体重为 people[i],每艘船可以承载的最大重量为 limit. 每艘船最多可同时载两人,但条件是这些人的重量之和最多 ...

  9. 2022年全球市场救生艇总体规模、主要生产商、主要地区、产品和应用细分研究报告

    本文研究全球市场.主要地区和主要国家救生艇的销量.销售收入等,同时也重点分析全球范围内主要厂商(品牌)竞争态势,救生艇销量.价格.收入和市场份额等. 针对过去五年(2017-2021)年的历史情况,分 ...

最新文章

  1. Nvidia推出强大的新图形芯片Tesl V100加速进军AI和深度学习的步伐
  2. nginx已添加systemctl,但不能开机自启动问题
  3. springMvc的执行流程(源码分析)
  4. Linux 守护进程的原理与实现
  5. Spinal Cage Fusion
  6. 关于jsp中 对只转发结果集的无效操作: last 异常
  7. Linux 用户篇——用户管理的配置文件
  8. 分割数组的最大值—leetcode410
  9. linux14.10硬盘安装,Windows 10下硬盘安装Ubuntu 14.10图文教程
  10. leetode题库5438--制作 m 束花所需的最少天数
  11. 人身三流指什么_保险合同的主体是什么,主体的变更是什么?
  12. 有关排序的贪心策略的一种证明思想
  13. Python语言程序设计 嵩天
  14. 条码管理系统,帮助企业打造高效的仓库管理模式
  15. 计算机文件夹操作有哪些,电脑操作常用的快捷键有哪些
  16. 关于用LM2596做的DC-DC数控电源
  17. hivesql uv
  18. stata面板数据gmm回归_gmm的stata操作步骤
  19. Redis的ZSET的实现及结合源码的跳跃表结构分析
  20. FPGA数字时钟系统-设计教程

热门文章

  1. Nginx + ModSecurity 报错
  2. 如何用uniapp+vue开发自定义相机插件——拍照+录像功能
  3. 为什么C++被公认为是最难的语言?
  4. linux/windows_vscode_配置mingw的C/C++环境(by official doc)/一些可能遇到的问题和对策)/vscode中文输出乱码问题
  5. 【大数据入门核心技术-Spark】(二)Spark核心模块
  6. 【Unity数据持久化】Ixmllserializable接口的使用
  7. one 主格 复数 宾格_主格与宾格.ppt
  8. XINLINX VC707 的学习
  9. 湖北一公司发生闪爆事故,这套化工厂巡检系统你有吗?
  10. 【UI学习】Android github开源项目,酷炫自定义控件(View)汇总