Python 程序查找包含最多 1 的行2024 年 8 月 29 日 | 阅读 6 分钟 在本教程中,我们将编写一个 Python 程序来查找给定二维矩阵中 1 最多的行。在给定的矩阵中,每一行都是排序的,我们需要找到包含最多 1 的行。让我们看下面的例子。 示例 - 输入矩阵 输出 2 解释 - 第二行包含最多的 1。 让我们来解决这个问题。 解决方案 一种简单的方法是遍历给定矩阵中的每一行,计算 1 的数量并与最大值进行比较。一旦我们得到最多的 1,就返回该索引。我们将使用二分查找算法来解决这个问题。让我们理解下面的例子。 示例 - 输出 Index of row with maximum 1s is: 2 解释 - 在上面的代码中,我们首先定义了 find_first_one() 函数,这是一个递归二分查找算法。它接受一个排序的布尔数组 (arr) 以及定义搜索范围的低位和高位索引。它使用分而治之的方法递归搜索数组中第一个 1 的索引。如果找到 1,它将返回索引;否则,它会在数组的适当一侧继续搜索。 然后,find_row_with_max_ones() 函数遍历给定矩阵的每一行。对于每一行,它调用 find_first_one() 函数来查找该行中第一个 1 的索引。它跟踪具有最多 1 的行的索引 (max_row_index) 以及该行中 1 的数量 (max_count)。如果一行中的 1 比之前找到的最大值多,它会相应地更新 max_row_index 和 max_count。最后,find_row_with_max_ones 函数返回 max_row_index,它代表给定二进制矩阵中 1 最多的行的索引。 上述代码的时间复杂度为 0(m*n),其中 m 是行数,n 是矩阵中的列数。 方法 - 2我们可以进一步优化上述代码。与其在行中进行二分查找,不如先检查该行是否比迄今为止的最大值有更多的 1。如果行包含更多的 1,那么只需计算行中的 1。我们不需要在完整的行中实现二分查找来查找行中的 1。我们在最后一个最大值的索引之前进行搜索。 让我们理解下面的例子。 示例 - 输出 Index of row with maximum 1s is: 2 解释 - find_first_one() 方法与我们在前一段代码中解释的相同。find_row_with_max_ones() 函数以矩阵为输入,并返回具有最多 1 的行的索引。我们将 max_ones 初始化为矩阵第一行中第一个 1 的索引,并将 max_row_index 初始化为 0,max_count 初始化为 -1。然后它遍历矩阵的其余行并执行以下检查。
最后,函数返回 max_row_index 的值,它代表给定矩阵中 1 最多的行的索引。 上述代码的时间复杂度为 0(mlogn),辅助空间为 0(logn)。 方法 - 3让我们来理解另一种方法。 示例 - 输出 Index of row with maximum 1s is: 2 解释 - 函数 find_row_with_max_ones() 以矩阵为参数。它使用 len() 函数确定矩阵的行数和列数。它将 max_row_index 变量初始化为 0,该变量将存储具有最多 1 的行的索引。 它将 index 变量初始化为 num_cols - 1,这代表最后一列的索引。函数使用 for 循环遍历矩阵的每一行。 在循环内部,将 flag 变量设置为 False,表示当前行是否比前一行有更多的 1。 然后它进入一个 while 循环,该循环检查 index 是否大于或等于 0,并且当前行在该 index 处的元素是否为 1。如果条件为真,它将 flag 变量设置为 True,并将 index 减 1 以移动到前一列。 一旦 while 循环结束,它就会检查 flag 是否为 True,表明当前行比前一行有更多的 1。如果 flag 为 True,它会将 max_row_index 更新为当前行索引。 循环结束后,它会检查一种特殊情况,即最大行索引为 0 且第一行的最后一个元素为 0。如果此条件为真,则返回 0。最后,它返回 max_row_index。 时间复杂度:上述代码的时间复杂度为 O(m+n),其中 m 是矩阵的行数,n 是矩阵的列数。 |
在接下来的教程中,我们将学习如何使用 Python 编程语言中的 Tkinter 库创建一个标准的单位转换器。但在我们开始构建项目之前,让我们简要讨论一下单位转换和一些相关方面。理解单位...
阅读 26 分钟
在本文中,您将学习 Python 中的最长公共前缀。在 Python 中有多种方法可以找到最长公共前缀。但在讨论这些方法之前,您必须了解最长公共前缀。什么是最长公共前缀?最长的字符串是...
阅读 10 分钟
当今世界,我们都熟悉 PDF 文件,因为它们是使用最广泛的数字文档格式之一。pdf 的全称是“便携式文档格式”,它使用“.pdf”扩展名保存文档文件。这独立于...
11 分钟阅读
在本教程中,我们将了解如何借助 Python 编程语言将 CSV 格式文件转换为 JSON 格式文件。但在开始之前,让我们了解 CSV 和 JSON 文件的含义。什么是 CSV 文件?CSV 文件是...
5 分钟阅读
在 CPU 中,调度方法选择进程的执行顺序,从而管理等待时间。其中一种方法被称为“最短作业优先”(SJF)或“最短作业”。该算法将最短的执行时间赋予进程...
5 分钟阅读
这款游戏会很有趣。让我们开始在 Python 中构建这个 Mad Libs 生成器项目,并学习一些有趣的创意。Mad Libs 生成器简介 这是一款流行的儿童游戏。用户会得到一个故事,并被要求输入一个单词,但不知道这个单词...
阅读 8 分钟
在本Python教程中,我们将探讨如何解决错误、Python中的“syntaxerror return outside function”以及“can't assign to function call”。在Python中使用函数时,会发生函数外返回的错误。在编程方面,函数是非常...
阅读 6 分钟
飞船泰坦尼克号问题是基本泰坦尼克号生存问题的进阶版本,机器学习爱好者必须面对一次,并预测一个人的生存几率。飞船泰坦尼克号项目问题说明 在这个项目中,一艘飞船载着许多人进行太空旅行。……
14 分钟阅读
Python 提供了最受欢迎的绘图库之一 Matplotlib。它是开源的、跨平台的,用于制作二维图表。它通常用于数据可视化和通过各种图表进行表示。Matplotlib 最初由 John D. Hunter 设计,...
5 分钟阅读
在本教程中,我们将演示如何使用个人 ID 访问一个人的数据,个人 ID 是 IMDb 分配给每个人的个人识别号。搜索人物方法可以用来按姓名查找人物,但由于许多人有相同的……
阅读1分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India