有效的算法来检查是否存在具有相同值的行和列
efficient algorithm to check if there exists a row and a column with same values?
我正试图用最少的运行时间来解决这个问题。如果给我们一个2D数组,我们需要返回x,如果存在一行所有值都等于x,而存在一列所有值都相等x。例如,对于下面的2d阵列,
0 3 1
2 3 1
1 1 1
我们应该返回1,因为最后一行和最后一列都是相同的值1。如果不存在这样的数字,我们可以返回-1。
我知道有很多方法可以解决这个问题,其中大多数都是O(n^2),我想知道是否有一种有效的方法(即O(n))可以找到这样的值。(其中n表示此阵列中的单元数)
好的,您澄清了您认为O(n)是2D数组中的值的数量。
我将在伪代码中概述这种方法,您可以将其翻译成Java或C++,无论您喜欢哪种。您的问题同时带有这两个标记,并且伪代码非常琐碎,可以直接翻译成C++或Java。或者Perl。或者Python。。。
第1部分
让我们从第一个简单的步骤开始,即如何检查是否有包含相同值的行。这方面的伪代码是基本的:
- 从第0行开始,n=0
- 检查矩阵[n][0]到[n][m-1](其中m是矩阵中的列数)是否包含相同的值。如果是的话,你找到了
- 否则,递增n,转到下一行,直到到达矩阵的底部
你应该能够理解这一点。这是"计算机科学101"的基本内容。
第2部分
现在,让我们修改这个伪代码,以便同时检查列。按如下方式修改上面的伪代码。
- 创建两个一维向量,将第一个向量称为
top_values
,或其他大小为m
的向量,即矩阵中的列数。调用第二个flags
,它是布尔标志的向量,它们的大小也是m
- 扫描第0行时,在第一部分中给出的伪代码中,将第0行的值复制到
top_values
中。也就是说,将matrix[0][x]
复制到top_values[x]
中。还可以将flags[x]
设置为true
(即使在扫描第0行之前,也可以将所有flags
初始化为true
,这无关紧要) - 当您使用第1部分中给出的伪代码扫描剩下的每一行时,将
matrix[y][x]
(其中y是您正在扫描的行#)与top_values[x]
进行比较。如果它们不相同,请将flags[x]
设置为false - 在第1部分伪代码的末尾,检查
flags
向量。如果其中的任何值仍然为真,那么矩阵中有一列的值是相同的
你的家庭作业是对上面的伪代码做一个小小的调整,告诉你在某行或某列中哪个值是相同的。
相关文章:
- 检查数字是否为素数的算法
- C++/STL 我应该使用哪种算法来检查容器是否有重复项?
- 检查向量是否使用除法和阻抗算法进行排序
- 如何检查 range:: 算法(如 find_if)是否返回了值?
- 如何检查 CNG Windows API 是否返回符合 FIPS 的算法实现
- 如何检查排序算法的空间复杂性
- c ++ 是否有 STL 算法来检查范围是否严格排序
- 接收数字和数字的算法并检查数字内部数字的次数
- 更好的算法来检查一个数字是否既不是素数也不是单个素数的幂
- C++中的数独检查器算法
- 算法-检查数字是否已经在列表中
- 有效的算法来检查是否存在具有相同值的行和列
- 检查字符串是否包含另一个字符串算法
- 基于瓷砖的外壳检查算法
- 优化算法以检查"Whether for a given directed graph there is only one way to sort the graph using topological
- 简单的拼写检查算法
- 我的交集检查算法有什么问题
- 检查树故障的算法
- 检查图像中颜色的更快算法
- 检查 C++0x 算法添加的可用性