LeetCode题目笔记——1710. 卡车上的最大单元数

2023-11-13

题目描述

请你将一些箱子装在 一辆卡车 上。给你一个二维数组 boxTypes ,其中 boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi] :

numberOfBoxesi 是类型 i 的箱子的数量。
numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载的单元数量。
整数 truckSize 表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过 truckSize ,你就可以选择任意箱子装到卡车上。

返回卡车可以装载 单元 的 最大 总数。

示例1:

输入:boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4
输出:8
解释:箱子的情况如下:

  • 1 个第一类的箱子,里面含 3 个单元。
  • 2 个第二类的箱子,每个里面含 2 个单元。
  • 3 个第三类的箱子,每个里面含 1 个单元。 可以选择第一类和第二类的所有箱子,以及第三类的一个箱子。 单元总数 = (1 * 3) + (2 * 2) + (1 * 1) = 8

示例2:

输入:boxTypes = [[5,10],[2,5],[4,7],[3,9]], truckSize = 10
输出:91

提示:

1 <= boxTypes.length <= 1000 1 <= numberOfBoxesi,
numberOfUnitsPerBox i <= 1000
1 <= truckSize <= 106

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

题目难度——简单

方法一:贪心

  题目的意思就要最大化可以装载的单元的数量,而装箱子的容量有限,那我们自然地想到优先装那些单位箱子里单元数目多的箱子,这样同等数目下的箱子,总的单元数才最多,于是我们可以对数据排个序,以第二维也就是单元数为依据进行降序排序,然后依次进行装箱,直到trucksize满或者所有箱子装完。

代码/Python

class Solution:
    def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
        boxTypes.sort(key=lambda item: item[1], reverse= True)
        res, i, box_num = 0, 0, len(boxTypes)
        while truckSize > 0 and i < box_num:
            n = min(truckSize, boxTypes[i][0])
            res += n * boxTypes[i][1]
            truckSize = max(0, truckSize - boxTypes[i][0])
            i += 1

        return res

在这里插入图片描述  有点慢,看看能不能优化,上面用到了min和max函数,函数调用有一定开销,我们可以不用这两个函数,来加速,具体的,使用if else语句就可以实现找最大最小。

class Solution:
    def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
        boxTypes.sort(key=lambda item: item[1], reverse= True)
        res, i, box_num = 0, 0, len(boxTypes)
        while truckSize > 0 and i < box_num:
            typ = boxTypes[i][0]
            unit = boxTypes[i][1]
            n = truckSize if truckSize < typ else typ
            res += n * boxTypes[i][1]
            truckSize = 0 if truckSize < typ else truckSize - typ
            i += 1

        return res

在这里插入图片描述
  可以看到还是快了不少的。

代码/C++

class Solution {
public:
    int maximumUnits(vector<vector<int>>& boxTypes, int truckSize) {
        sort(boxTypes.begin(), boxTypes.end(), [](vector<int> &A, vector<int> &B){
                return A[1] > B[1];
        });
        int res, i, box_n, type, n;
        res = i = 0;
        box_n = boxTypes.size();
        while(i < box_n && truckSize > 0){
            type = boxTypes[i][0];
            n = truckSize < type ? truckSize : type;
            res += n * boxTypes[i][1];
            truckSize = truckSize < type ? 0 : truckSize - type;
            i++;
        }   
        return res;
    }
};

在这里插入图片描述

总结

  首先要排序,所以时间是O(NlogN),只用到了常数空间,所以空间是O(1)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode题目笔记——1710. 卡车上的最大单元数 的相关文章

  • java项目时间不够怎么办_时间总是不够用怎么办?

    我在最近两年逐渐体会到两件事 1 这个世界上最公平的事情 就是每人每天拥有24个小时 2 绝大数人都是普通人 一次只能做一件事 我打游戏有三个原则 第一不玩匹配 其二不开声音 最后基本不双排 简单的三条原则 可以大大缩减我每赛季登录王者的时

随机推荐

  • 【git】git命令和相关脚本

    目录 git clone git checkout git diff git diff 忽略文件权限被修改的文件 对比两个分支差异 git add git pull rebase git pull git fetch git reset g
  • 如何查看linux版本 如何查看LINUX是多少位

    一 如何得知自己正在使用的linux是什么版本呢 下面的几种方法将给你带来答案 1 查看内核版本命令 1 root q1test01 cat proc version Linux version 2 6 9 22 ELsmp bhcompi
  • 【数组指针】 仅此一篇 让你深刻理解数组指针

    作者 Mitu 本帖内容著作权归作者所有 转载请务必保留本文链接 数组指针 数组指针 顾名思义 就是指向数组的指针 我们是这样定义它的 int p n n为要定义的个数 按照优先级运算 与 优先级相同 根据结合律 就从左向右运算 里是 p
  • vue中input中v-model语法糖原理

    v model是双向数据绑定 其本质是一个语法糖 我们怎么理解v model在中的运行原理呢 我们将代码进行拆分分析一下 div div
  • mysql如何快速导入大sql文件

    phpmyadmin有内存等的限制 所以文件过大会导致数据导入不全问题 Navicat Premium工具运行sql数据是可以倒全但是效率低 无法快速实现数据恢复 博主亲测source导入12Gsql mysql命令行执行 use data
  • Animator is not playing an AnimatorController

    调用bodyAnimator SetTrigger时出现标题的警告 原因是Animator所在的GameObject是不可见的 可以打印出activeInHierarchy确认一下 把动画的播放方式改为bodyAnimator Play就会
  • ruoyi的springboot微信小程序登录实现方式

    文章目录 前言 一 微信小程序的登录接口 二 微信用户数据库设计 三 springboot登录接口实现 1 新建实体WxUser 2 修改LoginUser类 3 增加wxLogin接口 4 微信小程序登录接口 5 开放接口 总结 前言 主
  • vue考试系统后台管理项目-登录、记住密码功能

    考试系统后台管理项目介绍 技术选型 Vue2 0 Elemenu ui 项目功能介绍 账户信息模块 菜单权限 角色权限设置 角色权限分配 账号设置 公司分组 考试管理模块 新增 编辑 删除考试试题 成绩查看 阅卷评分 成绩记录 成绩导出 题
  • 毕业设计 STM32单片机智能WiFi天气助手 - 物联网 单片机

    文章目录 0 前言 1 设计内容 2 软件设计 3 关键代码 4 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学弟学妹告诉学长自己做的项目系统达不到老
  • 【数据结构】冒泡排序、快速排序(递归,非递归)、归并排序(递归,非递归),七大排序比较,

    文章目录 冒泡排序 快速排序 归并排序 七大排序之间的对比 冒泡排序 基本思想 所谓交换 就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 交换排序的特点是 将键值较大的记录向序列的尾部移动 键值较小的记录向序列的前部移动
  • 一、Go基础知识入门

    1 go语言介绍 2 go开发环境搭建 2 1 go的安装 go下载地址 All releases The Go Programming Language windows选择下载go1 20 2 windows amd64 msi文件 双击
  • python join_join与python实现列合并

    在linux下powerpath对盘与更改盘符名 篇中提到了修改聚合后的多路径别名的问题 在数据库RAC增加存储盘的过程中 还会涉及一个常见的问题是多个RAC之间进行盘符名核对的问题 这里还是以三节点RAC 加 EMC存储盘为例 安装EMC
  • 【推理引擎】ONNXRuntime 的架构设计

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 ONNXRun
  • 【毕业设计】基于单片机的无接触测温枪 - MLX90614 红外测温仪 嵌入式 物联网 stm32

    文章目录 0 前言 1 简介 2 主要器件 3 实现效果 4 相关模块 配置介绍 5 部分核心代码 5 最后 0 前言 这两年开始毕业设计和毕业答辩的要求和难度不断提升 传统的毕设题目缺少创新和亮点 往往达不到毕业答辩的要求 这两年不断有学
  • Pyspark机器学习:模型评估(ml.Evaluation包的使用)

    Pyspark V3 2 1 本篇博客主要介绍pyspark ml Evaluation包的使用 1 概览 pyspark ml Evaluation包中的评估类主要包括以下几种如下表 类 作用 Evaluator 评估器的基类 但是这个类
  • Vmware 虚拟机提示:无法打开磁盘***.vmdk,未能锁定文件,解决办法

    虚拟机 vmware 6 5 Vmware 虚拟机提示 无法打开磁盘 vmdk 原因 未能锁定文件 解决办法如下 原因 非正常关闭虚拟机 解决办法 一 删除虚拟机文件所在文件来夹里所有以 lck 结尾的文件及文件夹 重新启动即可解决 二 如
  • 快速排序和归并排序的比较

    快速排序和归并排序的分析比较 快速排序 归并排序 设计思想 快速排序算法是在分治算法基础上设计出来的一种排序算法 从待排序序列中任选一个元素x作为哨点 以按从小到大排序为例 将所有比x大的元素放到哨点右边 将所有比x小的元素放到哨点左边 再
  • DIY多快充协议太阳能充电器!----BOOST升压电路

    上一篇文章介绍了支持三段式锂电池充电电路 使用上海如韵电子CN3791芯片的MPPT功能提高了锂电池充电过程中的能量转换效率 带来了锂电池快速蓄电 这篇文章咋们来看看如何将锂电池电压转化成支持多种快充协议的电压 单节锂电池的最高电圧为4 2
  • Python 实现 Dijkstar 路径规划算法

    Dijstar 最短路径算法 用于计算起始点到最终点的最短路径 一般采用的是贪心算法策略 原理可以参考 图解 Open list 和 close list 环境 Terminal 需要预先安装两个库 matplotlib 和 math pi
  • LeetCode题目笔记——1710. 卡车上的最大单元数

    文章目录 题目描述 题目难度 简单 方法一 贪心 代码 Python 代码 C 总结 题目描述 请你将一些箱子装在 一辆卡车 上 给你一个二维数组 boxTypes 其中 boxTypes i numberOfBoxesi numberOf