【每日一题Day28】LC1710卡车上的最大单元数 | 贪心

简介: 整数 truckSize 表示卡车上可以装载 箱子 的 最大数量 。只要箱子数量不超过 truckSize ,你就可以选择任意箱子装到卡车上。

卡车上的最大单元数【LC1710】


You are assigned to put some amount of boxes onto one truck. You are given a 2D array boxTypes, where boxTypes[i] = [numberOfBoxesi, numberOfUnitsPerBoxi]:


  • numberOfBoxesi is the number of boxes of type i.


  • numberOfUnitsPerBoxi is the number of units in each box of the type i.


You are also given an integer truckSize, which is the maximum number of boxes that can be put on the truck. You can choose any boxes to put on the truck as long as the number of boxes does not exceed truckSize.


Return the maximum total number of units that can be put on the truck.


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


  • numberOfBoxesi 是类型 i 的箱子的数量。


  • numberOfUnitsPerBoxi 是类型 i 每个箱子可以装载的单元数量。


整数 truckSize 表示卡车上可以装载 箱子最大数量 。只要箱子数量不超过 truckSize ,你就可以选择任意箱子装到卡车上。


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


又又又崩了,好点我做完了=)


  • 思路:贪心


。局部最优:尽可能装载容量大的箱子,即将箱子按照可以装载的单元数量从大到小装到卡车上


。全局最优:箱子数量一定时,能够装载的单元最大


  • 实现


。先将箱子按照容量从大到小排序


。依次遍历排序后的箱子,并使用变量统计已装载的单元数量res和箱子数量count


  • 如果count+当前箱子数量 boxTypes[i][0] > 卡车容量trunkSize,那么只装载卡车容量-count个箱子,res += (trunkSize - count) * boxTypes\[i][1] 并退出循环


  • 如果count+当前箱子数量boxTypes[i][0] > 卡车容量trunkSize,那么只装载boxTypes[i][0] 个箱子,res += boxTypes\[i][0] * boxTypes\[i][1]


  • 代码


class Solution {
    public int maximumUnits(int[][] boxTypes, int truckSize) {
      Arrays.sort(boxTypes,new Comparator<int[]>(){
          public int compare(int[] box1, int[] box2){
              return box2[1] - box1[1];
          }
      });
        int res = 0;
        int count = 0;
        for (int i = 0; i < boxTypes.length; i++){
            if (count + boxTypes[i][0] > truckSize){
                res += (truckSize - count) * boxTypes[i][1];
                break;
            }else{
                res += boxTypes[i][0] * boxTypes[i][1]; 
                count += boxTypes[i][0];
            }
        }
        return res;
    }
}


  • 复杂度


。时间复杂度:O ( n l o g n ),排序需要用O ( n l o g n ) 的时间

。空间复杂度:O ( 1 ),排序需要用O ( n l o g n ) 的递归调用栈空间

目录
相关文章
|
5月前
|
运维 Cloud Native 应用服务中间件
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
阿里云微服务引擎 MSE 面向业界主流开源微服务项目, 提供注册配置中心和分布式协调(原生支持 Nacos/ZooKeeper/Eureka )、云原生网关(原生支持Higress/Nginx/Envoy,遵循Ingress标准)、微服务治理(原生支持 Spring Cloud/Dubbo/Sentinel,遵循 OpenSergo 服务治理规范)能力。API 网关 (API Gateway),提供 APl 托管服务,覆盖设计、开发、测试、发布、售卖、运维监测、安全管控、下线等 API 生命周期阶段。帮助您快速构建以 API 为核心的系统架构.满足新技术引入、系统集成、业务中台等诸多场景需要
阿里云微服务引擎 MSE 及 API 网关 2025 年 4 月产品动态
|
8月前
|
数据可视化
如何减少低效沟通?小型团队信息管理的实战方法
在小型团队中,信息过载常导致沟通混乱和任务执行低效。本文探讨了信息过载的根源,并提出优化策略:统一沟通渠道、结构化任务指令、设定消息优先级以及使用可视化工具如板栗看板,以减少信息碎片化、提高执行精准度、避免干扰专注工作并让任务状态透明,从而提升整体协作效率。
328 59
|
11月前
|
机器学习/深度学习 人工智能 自然语言处理
探索人工智能的无限可能:技术前沿与应用实践
【10月更文挑战第23天】探索人工智能的无限可能:技术前沿与应用实践
|
11月前
|
SQL 安全 数据库
南大通用GBase 8s 查看用户权限查询指南
本文详细介绍了南大通用GBase 8s数据库中用户权限的查看与管理方法,涵盖数据库级别和表级别权限的定义、查看及赋权操作,以及相关系统表的使用,旨在帮助数据库管理员有效维护数据访问安全。
|
存储 前端开发 rax
x64汇编语言与逆向工程基础指南(三)
x64汇编语言与逆向工程基础指南(三)
430 1
|
9月前
|
存储 人工智能 边缘计算
AI时代下, 边缘云上的技术演进与场景创新
本文介绍了AI时代下边缘云的技术演进与场景创新。主要内容分为三部分:一是边缘云算力形态的多元化演进,强调阿里云边缘节点服务(ENS)在全球600多个节点的部署,提供低时延、本地化和小型化的价值;二是边缘AI推理的创新发展与实践,涵盖低时延、资源广分布、本地化及弹性需求等优势;三是云游戏在边缘承载的技术演进,探讨云游戏对边缘计算的依赖及其技术方案,如多开技术、云存储和网络架构优化,以提升用户体验并降低成本。文章展示了边缘云在未来智能化、实时化解决方案中的重要性。
405 3
|
11月前
|
人工智能 架构师 大数据
广西广电X阿里云:共同成立全媒体AI实验室!
广西广电X阿里云:共同成立全媒体AI实验室!
320 5
|
缓存 Rust 安全
Rust中的RESTful API构建:实践与探索
本文详细阐述了在Rust编程语言中如何构建RESTful API的过程。我们将通过实际示例,介绍Rust的生态系统中用于构建API的流行库和框架,包括Actix-Web、Rocket和Gotham。此外,我们还将讨论RESTful设计原则、API安全性、性能优化等方面的内容,帮助读者在Rust中高效、安全地构建RESTful API。
|
存储 安全 C++
Qt QList 详解:从底层原理到高级用法
Qt QList 详解:从底层原理到高级用法
2195 2
|
移动开发 开发框架 小程序
uni-app的优缺点;uniapp进行条件编译的两种方法;小程序端和H5的代表值
uni-app的优缺点;uniapp进行条件编译的两种方法;小程序端和H5的代表值
485 0