我有一个二维数组,其中随机包含0或1的值。
我如何(最有效地)确定值1的最低元素(最大的行迭代i)和最右边的元素(最高的列迭代j)?
例如:
0 0 1 0
1 0 1 0
0 1 0 0
1 0 0 0
我的程序应该回答i = 3(假设第一行是i = 0)和j = 2(假设第一列是0)。
最佳答案
这是一个主意:
从最底端的行开始,使用memrchr
查找每一行的最后一个1
(我假设您将数字存储为char
aka 8位整数)。
最终,您将找到一个包含1
的行。这是您对i
的回答。由于C使用行优先的顺序,因此我们使用了缓存友好的一次行操作实现了这一目标。
在上方,您现在还知道了j
的下限(因为您在最后一行中找到了具有任何1
的最后一个1
)。
对于其余的行,从memrchr
的下限开始到每一行的末尾使用j
。如果在那里找到任何1
,请更新下限。重复直到检查完所有行。
当然,如果您在最后一栏中找到1
,则可以立即停止。
关于c - 仅包含0或1的2D数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26506344/