我有矩阵0
并1
在里面vector<int>
填充了行(第一行,第二行等等..)。如何找到第一列和最后一列以及第一行和最后一行不包含仅零或仅包含内部的索引?我已经用循环和比较迭代了四次,但是有没有更快、更优雅的方法来做到这一点?
for example result here is columns with indexes 1 and 4 and rows with 1 and 4.
0 0 0 0 0
0 0 1 0 0
0 1 0 0 1
0 0 0 0 0
0 0 0 1 0
我有矩阵0
并1
在里面vector<int>
填充了行(第一行,第二行等等..)。如何找到第一列和最后一列以及第一行和最后一行不包含仅零或仅包含内部的索引?我已经用循环和比较迭代了四次,但是有没有更快、更优雅的方法来做到这一点?
for example result here is columns with indexes 1 and 4 and rows with 1 and 4.
0 0 0 0 0
0 0 1 0 0
0 1 0 0 1
0 0 0 0 0
0 0 0 1 0
我会说,您只需要两次迭代:一次迭代行,一次迭代列。
如果我理解正确的问题,这个编码应该显示它是如何编码的(只是一个草稿):
int firstRow = -1;
int lastRow = -1;
for (row=0; row<numRows; row++) {
int cnt = 0;
for (col=0; col<numCols; col++) {
cnt += vec[row][col];
}
if (cnt != 0 && cnt != numCols) {
if (firstRow == -1) firstRow = row;
lastRow = row;
}
}
// output firstRow, lastRow
对列执行相同的操作。
这种编码不一定比四次迭代快。当从开始到结束进行四次迭代时,如果列更接近限制,它们会更快。但它为您节省了一些编码。