Easy

题目描述

给你一个正整数 n,表示船上一个 n x n 的货物甲板。甲板上的每个格子可以放置一个重量恰好为 w 的集装箱。

但是,如果把所有集装箱都装载到甲板上,所有集装箱的总重量不能超过船的最大载重量 maxWeight

返回可以装载到船上的集装箱的最大数量。

示例 1:

输入:n = 2, w = 3, maxWeight = 15
输出:4
解释:甲板有 4 个格子,每个集装箱重量为 3。装载所有集装箱的总重量为 12,不超过 maxWeight。

示例 2:

输入:n = 3, w = 5, maxWeight = 20
输出:4
解释:甲板有 9 个格子,每个集装箱重量为 5。在不超过 maxWeight 的情况下,最多可以装载 4 个集装箱。

约束条件:

  • 1 <= n <= 1000
  • 1 <= w <= 1000
  • 1 <= maxWeight <= 10^9

提示:

  • 集装箱数量的限制是什么?
  • 我们最多可以装载 min(n * n, maxWeight / w) 个集装箱。

解题思路

这道题本质上是一个简单的数学问题。我们需要找到在两个约束条件下的最小值:

  1. 空间约束:甲板是 n x n 的,最多只能放置 n * n 个集装箱
  2. 重量约束:每个集装箱重量为 w,总重量不能超过 maxWeight,所以最多能放置 maxWeight / w 个集装箱(整数除法)

解题思路很直观:

  • 甲板总共有 n * n 个位置
  • 根据重量限制,最多能放 maxWeight / w 个集装箱
  • 实际能放置的集装箱数量就是这两个值的最小值

这个问题的核心在于理解约束条件。空间限制了物理位置的数量,而重量限制了总载重。我们必须同时满足这两个条件,因此取较小值。

时间复杂度为 O(1),因为只需要进行简单的算术运算。空间复杂度也是 O(1),不需要额外的存储空间。

代码实现

class Solution {
public:
    int maxContainers(int n, int w, int maxWeight) {
        return min(n * n, maxWeight / w);
    }
};
class Solution:
    def maxContainers(self, n: int, w: int, maxWeight: int) -> int:
        return min(n * n, maxWeight // w)
public class Solution {
    public int MaxContainers(int n, int w, int maxWeight) {
        return Math.Min(n * n, maxWeight / w);
    }
}
var maxContainers = function(n, w, maxWeight) {
    return Math.min(n * n, Math.floor(maxWeight / w));
};

复杂度分析

复杂度类型复杂度
时间复杂度O(1)
空间复杂度O(1)