一意の行番号を出力します。バイナリ2D配列のユニークな行を見つける
次は私の実装です:
#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' 'の2次元アレイを使用することにより、多くのスペースを無駄にしています。 – PaulMcKenzie
http://stackoverflow.com/questions/3169960/determining-the-unique-rows-of-a-2d-array-vectorvectortこのリンクはあなたに役立ちます – Module