• 【Java|golang】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

       public int maximumUnits(int[][] boxTypes, int truckSize) {
            Arrays.sort(boxTypes,(a,b)->b[1]-a[1]);
            int sum=0;
            for (int i = 0; i < boxTypes.length&&truckSize>0; i++) {
                if (truckSize>=boxTypes[i][0]){
                    sum+=boxTypes[i][0]*boxTypes[i][1];
                    truckSize-=boxTypes[i][0];
                }else {
                    sum+=truckSize*boxTypes[i][1];
                    truckSize=0;
    
                }
            }
            return sum;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    public int maximumUnits(int[][] boxTypes, int truckSize) {
            int[] ints = new int[1001];
            int sum=0;
            for (int i = 0; i < boxTypes.length; i++) {
                ints[boxTypes[i][1]]+=boxTypes[i][0];
            }
            for (int i = ints.length-1; i > 0&&truckSize>0; i--) {
                if (truckSize>=ints[i]){
                    sum+=i*ints[i];
                    truckSize-=ints[i];
                }else {
                    sum+=truckSize*i;
                    truckSize=0;
    
                }
            }
            return sum;
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    func maximumUnits(boxTypes [][]int, truckSize int) int {
        sort.Slice(boxTypes,func(i, j int) bool{
        	return boxTypes[j][1]<boxTypes[i][1]
    	})
        sum:=0
    	for i:=0;i< len(boxTypes)&&truckSize>0;i++{
    		if truckSize>boxTypes[i][0] {
    			sum+=boxTypes[i][0]*boxTypes[i][1]
    			truckSize-=boxTypes[i][0]
    		}else {
    			sum+=truckSize*boxTypes[i][1]
    			truckSize=0
    		}
    	}
        return sum
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    func maximumUnits(boxTypes [][]int, truckSize int) int {
        ints:=[1001]int{}
        sum:=0
    	for _, v := range boxTypes {
    		ints[v[1]]+=v[0]
    	}
    	for i:=1000;i>0&&truckSize>0;i--{
    		if truckSize>ints[i] {
    			sum+=i*ints[i]
    			truckSize-=ints[i]
    		}else {
    			sum+=truckSize*i
    			truckSize=0
    		}
    	}
        return sum
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    在这里插入图片描述

  • 相关阅读:
    人工智能相关书籍介绍
    SpringBoot整合MQTT(MqttClient)
    python系列:FastAPI学习-29 uvicorn 使用 log_config 参数设置 logger 日志格式
    Git工作中用到的常用操作
    Sql知识总结-MySql存储过程
    模型压缩-浅尝
    图片文字识别的方法有什么?哪种方法比较好用?
    DP - OOD - DIP
    十. Linux关机重启命令与Vim编辑的使用
    一文带你深入理解 AQS
  • 原文地址:https://blog.csdn.net/qq_44461217/article/details/127861097