我有一个看起来像这样的矩阵:
| 1 | 0 | 0 | 1 | 0 | | 1 | 1 | 0 | 1 | 0 | | 1 | 0 | 1 | 1 | 0 | | 1 | 0 | 0 | 1 | 0 | | 0 | 0 | 0 | 1 | 1 |
我应该找到这个矩阵是否有一个用所有1填充的列。在这个矩阵上是第4列。据说时间复杂度是O(n),内存是O(1)。
该矩阵表示一组(人)上的二进制关系。n是集合的大小,因此矩阵的大小为n * n。
n
n * n
我可以看到2种可能的解决方案:
还有其他解决方案吗?
让我对您要做什么进行一个非常疯狂的猜测。提及的提示:
O(n)
好吧,您不能那样做,O(n)我可以证明那仅仅是O(n^2)。
O(n^2)
但我的 野生 猜测是,你做一个经典的 名人身份的问题 ,那你 误解 的问题。
名人是其他所有人都认识但不认识的人。
我是名人鉴定问题,您正在尝试寻找类似的东西:
Find the number i where a[i][x] = 1 for all x -> every one knows the celebrity a[x][i] = 0 for all x != i -> the celebrity doesn't know anyone else
实际上,有了对您要查找的内容的额外限制,就可以找到O(n)解决方案。