打印唯一的行号。查找二进制二维数组中的唯一行
以下是我的实现:
#include <iostream>
#include <cmath>
int rowsToInt(int m[][5], int row, int cloumLen) {
int sum = 0;
// m[row][column]
for (int i = 0; i < cloumLen; i++) {
sum += m[row][i]*(std::pow(2,i));
}
return sum;
}
void removeDuplicate(int m[][5], int row, int column) {
if (!m) {
return;
}
int tracker = 0;
int mask = 1;
int value;
for (int i = 0; i < row; i++) {
value = rowsToInt(m, i, column); // 3
if (((mask << (value - 1)) & tracker) == 0) {
// print unique row
std::cout << "row: " << i << " is unique" << std::endl;
// set that bit to 1
tracker = tracker^(mask << (value - 1));
}
}
}
int main() {
int array[5][5] = {
{0,1,0,0,1},
{1,0,1,1,0},
{0,1,0,0,1},
{1,1,1,0,0},
{1,1,0,1,1}
};
removeDuplicate(array, 5, 5);
return 0;
}
输出为:
row: 0 is unique
row: 1 is unique
row: 3 is unique
row: 4 is unique
什么是运行时间?我认为它的O(行*列);因为每一行然后是每个列元素都被访问。
这是最优化的运行时间吗?
对于“二进制数组”,您是通过'int'的二维数组浪费了大量的空间。 – PaulMcKenzie
http://stackoverflow.com/questions/3169960/determining-the-unique-rows-of-a-2d-array-vectorvectort此链接应该帮助你 – Module