盒子堆叠问题17 Mar 2025 | 4 分钟阅读 问题陈述您将获得三个大小为 N 的整数数组,分别代表 N 个盒子的 H、W 和 L(高、宽、长)。 您的任务是将这些盒子堆叠起来,以达到最大的高度,并且您需要返回该最大高度。 要将一个盒子放在另一个盒子的顶部,顶盒的尺寸必须严格小于底盒的尺寸,这意味着顶盒的长和宽必须严格小于底盒的长和宽。 我们可以有多个盒子的实例,这意味着我们可以随意旋转盒子,然后将其用作另一个盒子。我们知道一个长方体有六个面。我们可以有六个盒子的实例,但只有三个唯一的实例,所以间接来说,我们将有 3*N 个具有不同尺寸的盒子,并且我们需要找到最大高度。 ![]() 方法我们将使用动态规划方法来解决这个问题。我们将根据宽度对数组进行排序,然后尝试找出最长递增子序列 (LIS) 来获得最大高度。 Java 示例输出 ![]() 解释 在上面的代码中,我们有三个不同的数组,分别代表四个不同盒子的 H、W 和 L。如我们所知,我们可以旋转盒子来创建它的实例,所以间接来说,我们将为这个问题提供 12 个选项或 12 个盒子。 我们将创建 pair 类来存储尺寸,并为我们的 ArrayList 编写比较器。我们将遍历数组,并将为每个盒子检查三种情况以获得其三个实例。 情况 1:如果盒子的宽度小于长度,那么我们将按原样添加尺寸。否则,我们将宽度与长度交换并将其添加为一个新盒子。 情况 2:如果盒子的高度小于长度,那么我们将交换高度和宽度;否则,我们将宽度与高度交换,然后再次将高度与长度交换,并将其添加为一个新盒子。 情况 3:如果盒子的高度小于宽度,那么我们将交换宽度和长度,然后交换长度和高度以获得新的尺寸盒子。否则,我们将高度与长度交换,并将其添加为一个新盒子。 在将所有相关的盒子添加到 ArrayList 后,我们将根据它们的宽度按升序对它们进行排序。 我们将使用 LIS(最长递增子序列)技术来获得解决方案。我们将创建一个大小与 ArrayList 相同的 dp 数组。 dp[i] 将存储通过堆叠从 0 到 i-1 的盒子所能获得的最大高度,前提是栈的底部是第 i 个盒子。 如果是第一个盒子,那么最大高度将是它本身的高度,这将是基本情况。 现在对于其余的盒子,我们将从 0 循环到 i-1,并获得 dp[j] 的最大值,然后我们将最大值和第 i 个盒子的高度相加,以获得盒子的最大尺寸。 dp 数组的最大值将是我们的答案。 在上面的示例中,我们有四个盒子,因此我们将创建它的 12 个实例,如下所示
时间复杂度:O(N2) 空间复杂度:O(N) 下一个主题Java 中的 K 个最频繁元素 |
给出了两个正整数 n 和 k。如果 x 是回文数,则该数称为 k-回文数。按 k,x 可整除。返回一个字符串,表示具有 n 位数字的最大 k-回文整数。示例 1:输入:int N = 2 int k = 3 输出:The...
阅读 24 分钟
Java 中的按位与 (&) 和逻辑与 (&&) 运算符之间的区别 在 Java 中,&(按位与)和 &&(逻辑与)运算符具有不同的目的和行为。虽然两个运算符都涉及 AND 的概念,但它们应用于不同的上下文。按位与 (&) 运算符 单一 AND……
阅读 4 分钟
在本节中,我们将学习什么是史密斯数,并创建 Java 程序来检查给定数字是否为史密斯数。史密斯数程序经常在 Java 编码测试和学术界出现。史密斯数一个史密斯数是一个复合数,其...
阅读 4 分钟
超级巨星困境是计算机科学中,特别是在算法问题解决领域中经常遇到的经典难题。这个问题可以概括如下。假设有一个有 N 个人的聚会。“名人”意味着每个人都知道某个人,但没有人知道其他人。目标是...
5 分钟阅读
字节码和机器码是编程中使用的两个重要术语。字节码是在带有 Java 虚拟机 (JVM) 的任何平台上都可以执行的编译代码。相反,机器码是可以直接由...执行的二进制代码。
阅读 2 分钟
反转或镜像二叉树在计算机科学和编程中很常见。它会反转每个节点上左右子树的排列,从而有效地创建原始树的镜像。该过程本质上是在其垂直轴上镜像树。在二叉树中...
阅读9分钟
字符串压缩是计算机科学和编程中的一个基本问题,其目标是通过计算连续重复字符来压缩字符串。该问题的本质是更有效地表示字符串,尤其是在处理大型数据集时。这种技术在各种场景下都很有用...
7 分钟阅读
在不断发展的技术格局中,自然语言处理 (NLP) 在弥合人类交流与计算机理解之间的差距方面发挥着至关重要的作用。Java 是一种通用且广泛使用的编程语言,它使开发人员能够通过各种库和框架来利用 NLP 的潜力……
阅读 3 分钟
Java 中的 switch 语句在最近的 Java 版本中进行了一些修改,以添加一些新功能。在本教程中,我们将讨论 Java 12 中的 switch 语句。但是,在此之前,让我们看一个展示实现的示例……
阅读 3 分钟
数据访问对象模式,通常称为 DAO 模式,用于将高层业务服务与低层数据访问 API 或操作分开。数据访问对象模式的成员列于下文。数据访问对象接口:数据访问对象接口指定了……
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India