carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode1710:卡车上的最大单元数(maximum-units-on-a-truck) #269

Open carloscn opened 1 year ago

carloscn commented 1 year ago

问题描述

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

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

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

 

示例 1:

输入:boxTypes = [[1,3],[2,2],[3,1]], truckSize = 4 输出: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

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/maximum-units-on-a-truck

carloscn commented 1 year ago

问题分析

pub fn maximum_units(box_types: Vec<Vec<i32>>, truck_size: i32) -> i32
{
    if box_types.len() < 1 || truck_size == 0 {
        return 0;
    }

    let mut ret:i32 = 0;
    let mut box_vec:Vec<Vec<i32>> = box_types.clone()
                                             .iter_mut()
                                             .map(|x| {
        let t = x[0];
        x[0] = x[1];
        x[1] = t;
        x.clone()
    }).collect::<Vec<Vec<i32>>>();

    box_vec.sort();
    box_vec.reverse();

    let mut box_num:i32 = 0;
    for e in box_vec {
        if box_num + e[1] < truck_size {
            ret += e[1] * e[0];
            box_num += e[1];
        } else {
            ret += (box_num + e[1] - truck_size) * e[0];
            break;
        }
    }

    return ret;
}
carloscn commented 1 year ago

code

https://review.gerrithub.io/c/carloscn/structstudy/+/556476 https://github.com/carloscn/structstudy/commit/c8b09c6666ee2d96f34e54cb7471b50c7d82111d