打印唯一的行號。查找二進制二維數組中的唯一行
以下是我的實現:
#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