【发布时间】:2023-03-25 19:08:01
【问题描述】:
我正在通过我的大学处理一些有问题的复杂性问题:
程序输入:n x nArray[][] 填充有0 或1。
定义:如果k 行中的所有值都是0,并且k 列中的所有值都是1,则将k 定义为SINK(除了[k][k] 本身需要是0)
程序输出:是否有一个 k 数是 SINK?如果是,则返回k,否则返回-1。
例子:
在 Arr A 上 k=3 是 SINK,在 Arr B 上没有 SINK,因此返回 -1。
这个任务的主要问题是程序的复杂性必须低于O(n^2),我已经设法用这种复杂性解决了这个问题,越过对行和列求和的斜线。我还没有找到用O(logn) 或O(n) 解决这个问题的方法。该任务还阻止您使用另一个 Array[] (由于内存复杂性)。任何人都可以对此事有所了解吗?提前致谢!
【问题讨论】:
-
内存复杂度的限制究竟是什么?由于已经使用了 O(n^2),因此额外的 O(n) 应该不会造成伤害。
-
我已经设法用 O(n^2) 解决了这个问题,但这不是任务的要求。它需要少于那个。如果您能找到一种使用 O(n) 内存复杂度(没有准时 O(n^2) )解决此问题的方法,那也将非常有帮助。
-
您的意见是什么?二维数字数组?还是像字符串一样存储的表?
-
二维数字数组(0或1)
标签: c# java arrays algorithm task