我是靠谱客的博主 鲤鱼网络,最近开发中收集的这篇文章主要介绍1710. 卡车上的最大单元数-Python按关键字排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1710. 卡车上的最大单元数

请你将一些箱子装在 一辆卡车 上。给你一个二维数组 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, numberOfUnitsPerBoxi <= 1000
  • 1 <= truckSize <= 106

 算法思想:

首先我们得先对二维数组按行按某个元素进行排序,我们先看下面这个例子:

假设有一个学生列表存储了学号,姓名,年龄信息:

students = [[3,'Jack',12],[2,'Rose',13],[1,'Tom',10],[5,'Sam',12],[4,'Joy',8]]

按学号顺序排序:

sorted(students,key=(lambda x:x[0]))
[[1, 'Tom', 10], [2, 'Rose', 13], [3, 'Jack', 12], [4, 'Joy', 8], [5, 'Sam', 12]]

接着再来看我们这题,我们可以对二维数组按每行的第二个元素进行排序,优先加上存储量大的箱子(在不超过最大箱子数量的truckSize情况下),这样我们就可以得到如下代码:

class Solution:
    def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
        sum = 0
        list = sorted(boxTypes, key=(lambda x:x[1]),reverse=True)#按第2个元素降序排列
       
        for i in range(len(list)):
            sum += list[i][0] * list[i][1]#list[i][0]为元素个数,list[i][1]为元素值
            truckSize -= list[i][0]
            if(truckSize < 0):
                sum -= list[i][0] * list[i][1]
                truckSize += list[i][0]
                sum += truckSize * list[i][1]
                break
        return sum

最后

以上就是鲤鱼网络为你收集整理的1710. 卡车上的最大单元数-Python按关键字排序的全部内容,希望文章能够帮你解决1710. 卡车上的最大单元数-Python按关键字排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部