查找包含最多 1 的行2024年9月10日 | 阅读 6 分钟 给定一个布尔二维数组,其中每一行都按升序排序。我们的任务是找到值为 true(也称为 1)数量最多的行,并返回该行的索引。 示例 1 输入 输出 1 示例 2 输入 输出 2 方法:逐行遍历逐行遍历是矩阵相关问题中常用的一种方法,即一次遍历矩阵的一行。在这种方法中,我们遍历矩阵的每一行,并在移动到下一行之前对每个元素执行一些操作。当矩阵的行数很多但列数很少时,此技术尤其有用,因为它可以最大程度地减少所需的列向操作次数。 文件名: MaxOnesRowFinder.java 输出 Max row index: 2 复杂度分析: MaxOnesRowFinder 类中 findMaxRow 方法的时间复杂度为 O(m*n),其中 m 是输入矩阵的行数,n 是列数。这是因为该方法遍历每一行,然后遍历该行中的每个元素以计算 1 的数量。countOnes 方法由 findMaxRow 调用,其时间复杂度为 O(n),其中 n 是输入行中的元素数量。 MaxOnesRowFinder 类的空间复杂度为 O(1),因为该算法仅使用固定数量的变量来跟踪具有最多 1 的行以及该行中 1 的数量。输入矩阵未被修改,也没有创建其他数据结构。因此,空间复杂度不取决于输入矩阵的大小。 方法:二分查找二分查找方法用于查找二元矩阵中 1 的数量最多的行,该方法涉及遍历每一行并使用二分查找计算每一行中 1 的数量。该算法维护两个变量来跟踪迄今为止看到的 1 的最大计数以及相应的行索引。它应用二分查找技术来有效地计算给定行中 1 的数量。 算法步骤 1:定义一个公共类 BinaryMatrixRowWithMax1s。 步骤 2:定义一个公共方法 rowWithMax1s(int[][] mat) 来查找二元矩阵中 1 的数量最多的行。此方法应接受一个整数二维数组作为输入。 步骤 3:初始化变量来存储具有最多 1 的行的行索引和最多 1 的数量。 步骤 4:遍历矩阵的每一行,并使用二分查找计算当前行中 1 的数量。如果当前计数超过最大计数,则更新最大计数和相应的行索引。 步骤 5:返回具有最多 1 的行的行索引。 实施文件名: BinaryMatrixRowWithMax1s.java 输出 Row with maximum 1s: 2 复杂度分析 BinaryMatrixRowWithMax1s 方法的时间复杂度为 O(m*logn),其中 m 是输入矩阵的行数,n 是列数。这是因为该方法遍历每一行,并在每一行上执行二分查找以计算 1 的数量,这在最坏情况下需要 logn 时间。countOnes 方法的时间复杂度也为 O(logn),因为它对单行执行二分查找以计算 1 的数量。 代码的空间复杂度为 O(1),因为唯一使用的额外空间是用于存储最大行索引和最多 1 的数量,它们都是整数。代码执行期间未修改输入矩阵。 下一主题Java 中的泛型比较器 |
在 Java Web 开发中,“Handler dispatch failed”错误是在使用 Spring MVC 等 Web 框架时遇到的常见问题。当应用程序的请求处理过程中出现无限循环或递归时,通常会发生此错误,从而导致 java.lang.StackOverflowError。在...
阅读 3 分钟
计算所有 1 的子矩阵是编程中一个常见的问题,它涉及到在一个给定的二进制矩阵(仅包含 0 和 1)中找到所有元素都是 1 的子矩阵的数量。这个问题广泛应用于图像处理、数据分析等领域...
14 分钟阅读
在 Java 中,递增和递减运算符是一元运算符。它们分别用于将变量的值增加或减少 1。递增运算符由一对加号(++)表示,递减运算符由...
阅读 6 分钟
在这个问题中,我们的任务是逐块创建金字塔。每个块都有一个与字母对应的颜色。金字塔的构建方式是,每一行比下面一行少一个块。要创建金字塔,...
7 分钟阅读
Java JDBC 选择题 JDBC 是一个 API(应用程序编程接口),它帮助程序员编写 Java 程序来连接数据库、从数据库检索数据,并在 Java 程序中对数据执行各种操作。它...
阅读 10 分钟
在编程世界中,处理数字是一项基本任务。通常,我们需要为各种应用程序(如密码学、数据验证或数学运算)来操作数字中的各个数字。这个过程称为数字提取。在本节中,我们将探讨不同的...
阅读 3 分钟
在 Web 世界中,会话是指任何两个系统相互交互的时间长度。这两个系统可以彼此建立点对点或客户端-服务器关系。然而,问题在于,在 HTTP 协议中,状态的...
阅读 6 分钟
给定一个正整数数组,其中每个整数的位数相同。两个整数在同一位置出现的不同数字的数量称为它们之间的数字差。每个对之间的数字差的总和...
7 分钟阅读
给定一个字符串 S,判断它是否是 K-回文。当从 K-回文字符串中删除最多 K 个字符时,字符串变为回文。在这里,任务是从给定字符串中删除最多 K 个字符,以将其转换为其...
阅读 6 分钟
在 Java 中,LinkedTransferQueue 是一个并发队列实现,它结合了传统阻塞队列和直接传递队列的特性。它实现了扩展了 BlockingQueue 类的 TransferQueue 接口,并通过... 扩展了生产者-消费者场景的功能。
14 分钟阅读
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India