【发布时间】:2016-07-24 20:42:20
【问题描述】:
打印唯一的行号。
以下是我的实现:
#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(row*column);因为每一行然后每一列元素都会被访问。
这是最佳的运行时间吗?
【问题讨论】:
-
对于“二进制数组”,使用
int的二维数组会浪费大量空间。 -
stackoverflow.com/questions/3169960/… 这个链接应该对你有帮助
标签: c++ arrays matrix multidimensional-array