【排序-简单】1710. 卡车上的最大单元数

博客围绕将箱子装在卡车上的问题展开,给定二维数组boxTypes和卡车最大装载箱子数truckSize,求卡车可装载单元的最大总数。给出示例及提示,并展示了两种Python解法,分别说明了执行用时和内存消耗情况。

【题目】
请你将一些箱子装在 一辆卡车 上。给你一个二维数组 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
    【代码】
    【Python】
    思路:使用dict字典
    执行用时:
    48 ms, 在所有 Python3 提交中击败了92.08%的用户
    内存消耗:
    15.2 MB, 在所有 Python3 提交中击败了15.75%的用户
class Solution:
    def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
        rs=0        
        boxTypes=sorted(boxTypes, key = lambda kv:(kv[1], kv[0]),reverse=True)
        for x in boxTypes:
            if truckSize:
                if x[0]<=truckSize: 
                    truckSize-=x[0]
                    rs+=x[0]*x[1]
                else:
                    rs+=truckSize*x[1]
                    truckSize=0
            else:
                break
        return rs

【方法2】对内存友好,代码简洁
执行用时:
68 ms, 在所有 Python3 提交中击败了21.18%的用户
内存消耗:
14.9 MB, 在所有 Python3 提交中击败了94.01%的用户

class Solution:
    def maximumUnits(self, boxTypes: List[List[int]], truckSize: int) -> int:
        boxTypes=sorted(boxTypes, key = lambda kv:(kv[1], kv[0]),reverse=True)
        rs=0
        for x in boxTypes:
            rs+=x[1]*min(x[0],truckSize)
            truckSize-=min(x[0],truckSize)
        return rs
clear; clc; close all; %% 1. 系统参(严格匹配文档) c = 3e8; % 光速 (m/s) fc = 77e9; % 载频 77 GHz(文档默认车载雷达频段) lambda = c / fc; % 波长 (m) B = 150e6; % 带宽 150 MHz(文档三角波FMCW参) T_sweep_single = 1e-3; % 单扫频时间 1 ms(上/下扫各1ms) T_sweep_tri = 2*T_sweep_single; % 三角波周期 2 ms K = B / T_sweep_single; % 调频斜率 (Hz/s):150e6 / 1e-3 = 1.5e11 Hz/s %% 2. 目标与雷达运动参(文档场景) v_radar = 60 * 1000 / 3600; % 雷达速度:60 km/h → 16.6667 m/s % 目标1(轿车):相对雷达速度=96-60=36 km/h → 10 m/s,距离50 m target1 = struct('R', 50, 'v_rel', 10); % 目标2(卡车):相对雷达速度=-70-60=-130 km/h → -36.1111 m/s,距离55 m target2 = struct('R', 55, 'v_rel', -130*1000/3600); %% 3. 计算真实目标的上/下扫频差频 % 上扫频差频公式:f_u = (2K/c)R + (2v_rel/lambda) % 下扫频差频公式:f_d = (2K/c)R - (2v_rel/lambda) f_u1 = (2*K/c)*target1.R + (2*target1.v_rel)/lambda; % 目标1上扫频差频 f_d1 = (2*K/c)*target1.R - (2*target1.v_rel)/lambda; % 目标1下扫频差频 f_u2 = (2*K/c)*target2.R + (2*target2.v_rel)/lambda; % 目标2上扫频差频 f_d2 = (2*K/c)*target2.R - (2*target2.v_rel)/lambda; % 目标2下扫频差频 %% 4. 计算虚像(差频交叉组合,文档中4组解) % 虚像差频组合:[f_u1,f_d1]与[f_u2,f_d2]交叉,共4种组合 beat_pairs = [ f_u1, f_d1; % 真实目标1 f_u2, f_d2; % 真实目标2 f_u1, f_d2; % 虚像1 f_u2, f_d1 % 虚像2 ]; % 从差频转换为距离(文档beat2range函逻辑) rng_est = (c/(4*K)) * (beat_pairs(:,1) + beat_pairs(:,2)); % 距离估算公式 % 从差频计算速度(速度计算公式:v = (lambda/4) * (f_beat1 - f_beat2)) vel_est = (lambda/4) * (beat_pairs(:,1) - beat_pairs(:,2)); % 速度估算公式 %% 5. 结果输出(匹配文档中4组距离:~50,~55,~64,~40) fprintf('===== 三角波FMCW雷达 - 真实目标与虚像距离和速度估算(文档参) =====\n'); fprintf('真实目标1(轿车)估算:距离=%.2f m,速度=%.2f m/s(理论50 m,10 m/s)\n', rng_est(1), vel_est(1)); fprintf('真实目标2(卡车)估算:距离=%.2f m,速度=%.2f m/s(理论55 m,-36.11 m/s)\n', rng_est(2), vel_est(2)); fprintf('虚像1估算:距离=%.2f m,速度=%.2f m/s(文档典型值~64 m)\n', rng_est(3), vel_est(3)); fprintf('虚像2估算:距离=%.2f m,速度=%.2f m/s(文档典型值~40 m)\n', rng_est(4), vel_est(4)); %% 6. 可视化(真实目标与虚像位置和速度) figure('Position', [100, 100, 800, 600]); % 绘制真实目标和虚像的距离-速度散点图 hold on; grid on; % 真实目标1 scatter(rng_est(1), vel_est(1), 100, 'b', 'o', 'filled', 'DisplayName', ['真实目标1(距离:', num2str(round(rng_est(1))), ' m,速度:', num2str(round(vel_est(1))), ' m/s)']); % 真实目标2 scatter(rng_est(2), vel_est(2), 100, 'r', 'o', 'filled', 'DisplayName', ['真实目标2(距离:', num2str(round(rng_est(2))), ' m,速度:', num2str(round(vel_est(2))), ' m/s)']); % 虚像1 scatter(rng_est(3), vel_est(3), 100, 'g', 's', 'filled', 'DisplayName', ['虚像1(距离:', num2str(round(rng_est(3))), ' m,速度:', num2str(round(vel_est(3))), ' m/s)']); % 虚像2 scatter(rng_est(4), vel_est(4), 100, 'm', 's', 'filled', 'DisplayName', ['虚像2(距离:', num2str(round(rng_est(4))), ' m,速度:', num2str(round(vel_est(4))), ' m/s)']); xlabel('距离 (m)'); ylabel('速度 (m/s)'); title('三角波FMCW雷达:目标与虚像的距离-速度关系(文档参)'); legend('Location', 'best'); 你给出的代码虚像参计算存在问题,使用我给你的上面的代码,另外:3d速度显示范围过大,2d图速度没有负半轴。最后,从输出接过来看,目标的距离和速度提取信息有问题
最新发布
09-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值