Java 中显示二进制矩阵中的唯一行2025年3月17日 | 阅读 15 分钟 在本节中,我们将讨论如何在 Java 中显示二进制矩阵的唯一行。在此问题中,给出了一个二进制矩阵,我们需要识别并打印给定的二进制矩阵的唯一行。 示例 1 ![]() 解释 在上面的输入矩阵中,有 5 行 R1 = {0, 1, 1, 0, 0},R2 = {1, 0, 0, 1, 1},R3 = {0, 1, 1, 1, 1},R4 = {0, 1, 1, 0, 0, 0},以及 R5 = {0, 0, 1, 0, 1}。在这 5 行中,R1 和 R4 行相同,其余行是唯一的。因此,输出中舍弃了 R4 行。 示例 2 ![]() 解释 在上面的输入矩阵中,有 4 行 R1 = {0, 1, 1, 0},R2 = {1, 0, 1, 0},R3 = {0, 1, 1, 0},R4 = {1, 0, 0, 1}。在这 4 行中,R1 和 R3 行相同,其余行是唯一的。因此,输出中舍弃了 R3 行。 朴素方法朴素方法很简单。首先,打印第一行,然后检查第二行是否与已打印的行(第一行)匹配。如果匹配,则丢弃第二行;否则,打印第二行。对于第三行,检查它是否与已打印的行(第一行和第二行)匹配。如果不匹配,则不打印第三行;否则,打印第三行。其他行也以相同的方式处理。 实现步骤以下是实现朴素方法所需的步骤。 步骤 1:逐行遍历矩阵的元素。 步骤 2:对于当前行,检查它是否与任何前一行匹配。 步骤 3:如果当前行与前一行匹配,则不打印当前行。 步骤 4:否则,显示当前行。 让我们看看上述算法的实现。 文件名:UniqueRowsMatrix.java 输出 For the following matrix: 0 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 1 0 1 The unique rows are: 0 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 0 1 0 1 For the following matrix: 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 The unique rows are: 0 1 1 0 1 0 1 0 1 0 0 1 复杂度分析:在上面的程序中,我们将每一行与之前出现的行进行比较,以检查该行是否唯一。在行比较中,我们需要检查一行中的每个元素是否与另一行(列大小)匹配。因此,上述程序的 time complexity 为 O(R2 x C),其中 R 是矩阵中的总行数,C 是矩阵中的总列数。由于我们没有在程序中使用任何辅助数组,因此程序的 space complexity 是常数,即 O(1)。 如果我们观察上述程序,我们会发现有许多子问题被计算了不止一次,导致了指数级的时间复杂度。观察以下内容。 方法:使用二叉搜索树在此方法中,第一个要求是计算每一行的十进制等效值,并将它们推入二叉搜索树。请注意,二叉搜索树的每个节点包含两个字段:一个用于十进制值,另一个用于行号。 实现步骤以下是实现二叉搜索树方法所需的步骤。 步骤 1:创建一个不存储重复节点的二叉搜索树。 步骤 2:创建一个方法,将一行转换为十进制,并将十进制值转换为二进制数组。 步骤 3:遍历输入矩阵,并将行插入二叉搜索树。 步骤 4:对二叉搜索树进行中序遍历,将十进制转换为二进制数组,然后显示它。 让我们看看上述算法的实现。 文件名:UniqueRowsMatrix1.java 输出 For the following matrix: 0 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 1 0 1 The unique rows are: 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 1 1 1 1 For the following matrix: 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 The unique rows are: 0 1 1 0 1 0 1 0 1 0 0 1 复杂度分析:在上面的程序中,我们遍历矩阵的每一行和每一列,time complexity 为 O(R * C)。另外,在二叉搜索树中插入一行的 time complexity 为 O(R)。由于我们插入每一行,因此插入消耗的时间为 R * O(log(R))。因此,上述程序的 overall time complexity 为 O(R * C + R * (log(R)))。在程序中,我们使用辅助空间来存储二叉搜索数组,导致 space complexity 为 O(R),其中 R 是输入矩阵的行大小,C 是输入矩阵的列大小。 方法:使用 TRIE在此方法中,我们将使用 TRIE 数据结构来查找唯一行。我们知道 TRIE 数据结构是一种高效的数据检索数据结构。使用 TRIE 数据结构,可以优化搜索的复杂性。我们知道输入矩阵是二进制矩阵;因此,我们将对 TRIE 数据结构进行一些定制,其中每个节点将有两个子节点,一个用于 1,另一个用于 0。 实现步骤步骤 1:创建一个 TRIE 数据结构来存储行。 步骤 2:遍历每一行,并将其插入到上一步创建的 TRIE 数据结构中。由于 TRIE 永远不能包含任何重复条目;因此,当我们遍历重复行以将其插入 TRIE 时;它不会影响 TRIE 数据结构。因此,在遍历完输入矩阵的每一行后,TRIE 中存在的都是唯一行。 步骤 3:遍历 TRIE 数据结构并显示行。 让我们看看上述算法的实现。 文件名:UniqueRowsMatrix2.java 输出 For the following matrix: 0 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 1 0 1 The unique rows are: 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 1 1 1 1 For the following matrix: 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 The unique rows are: 0 1 1 0 1 0 1 0 1 0 0 1 复杂度分析:在上面的程序中,我们遍历矩阵的每一行和每一列,time complexity 为 O(R * C)。在程序中,我们使用辅助空间来存储 TRIE 数据结构,导致 space complexity 为 O(R * C),其中 R 是输入矩阵的行大小,C 是输入矩阵的列大小。 方法:使用 HashSet在此方法中,我们将使用 HashSet 数据结构来查找唯一行。我们知道 HashSet 数据结构实现了 Set 接口。因此,HashSet 中不能存在任何重复数据。该方法是将 HashSet 的每一行转换为 String 并将其插入 HashSet。 实现步骤步骤 1:创建一个 HashSet 数据结构来存储行。 步骤 2:遍历每一行,并将其插入到上一步创建的 Hash 数据结构中。由于 HashSet 永远不能包含任何重复条目;因此,当我们遍历重复行以将其插入 HashSet 时,它不会影响 HashSet 数据结构。因此,在遍历完输入矩阵的每一行后,HashSet 中存在的都是唯一行。请注意,在将行插入 HashSet 之前,将其转换为 String。例如, 对于以下行 ![]() 我们将得到字符串“10011”。 步骤 3:遍历 HashSet 数据结构并显示行。 让我们看看上述算法的实现。 文件名:UniqueRowsMatrix3.java 输出 For the following matrix: 0 1 1 0 0 1 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 1 0 1 The unique rows are: 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 0 1 1 1 1 For the following matrix: 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 The unique rows are: 0 1 1 0 1 0 1 0 1 0 0 1 复杂度分析:在上面的程序中,我们遍历矩阵的每一行和每一列,time complexity 为 O(R * C)。在程序中,我们使用辅助空间来存储 Hash 数据结构,导致 space complexity 为 O(R * C),其中 R 是输入矩阵的行大小,C 是输入矩阵的列大小。 下一个主题Java 中将矩阵旋转 180 度 |
判断一个给定的字符串是否是偶数-奇数回文串是当前的任务。当偶数索引处的字符构成一个回文串,而奇数索引处的字符构成一个独立的回文串时,该字符串就被称为...
5 分钟阅读
矩阵指数是线性代数中的一个基本概念,在量子力学、控制理论和微分方程等领域都有应用。它将标量指数函数 (e^x) 推广到矩阵。对于方阵 (A),其指数 (e^A ) 由以下无穷级数定义:...
7 分钟阅读
Java 提供了丰富而强大的库和工具来构建图形用户界面(GUI)。GUI 编程的一个重要方面是处理窗口事件。当用户与 GUI 交互时,例如打开、关闭、调整大小或移动窗口,就会发生窗口事件……
5 分钟阅读
在本节中,我们将通过不同的方法学习如何使用 Java 查看二叉树的底部视图。在二叉树的底部视图中,我们只打印那些当二叉树...时可见的节点。
5 分钟阅读
数字序列程序是编码挑战、竞争性编程甚至现实世界应用程序的常见且重要的组成部分。它们涉及生成或查找数字序列中的模式,这使得它们成为任何 Java 程序员的宝贵技能。在本节中,我们将探讨数字……
5 分钟阅读
Java 和 JDK 之间的区别 Java 是一种高度适应性和强大的编程语言,因为它可以运行在任何具有 Java 虚拟机(JVM)的设备上。开发人员喜欢它来创建企业解决方案、移动应用程序和 Web 应用程序。为了充分利用……
5 分钟阅读
Java 泛型是一个概念,可以在竞争性编程中有效地用于编写最优和可重用的代码。泛型使您能够声明类或接口,以及具有类型参数的方法,这些类型参数可以在之后在……期间用具体类型替换。
阅读 16 分钟
当且仅当两个双缓冲区的元素类型相同,剩余元素数量相等,并且当考虑它们来自何处时,两个元素序列逐点等效时,它们才相等。……
阅读 4 分钟
调和数是一个迷人的数学概念,在物理、工程和计算机科学等各个领域都有应用。在本节中,我们将探讨调和数是什么,它们的意义以及如何在 Java 中计算它们。我们还将提供带有输出的示例 Java 程序……
阅读 4 分钟
Eclipse 是 Java 和 Android 设计者中最杰出的 IDE 之一。如果 Eclipse 未按预期配置,则会出现许多问题。您需要单独尝试所有这些问题。一些用户在 Java 启动时遇到了问题……
5 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India