【问题标题】:Fastest way to sum matrix of 1's (ones) and 0's (zeros) in Java在 Java 中求和 1(一)和 0(零)矩阵的最快方法
【发布时间】:2017-03-21 00:33:34
【问题描述】:

如果我有这样的数据结构:

1 0 1 0
0 0 0 0
0 1 0 1

...有没有办法在不遍历整个数组及其子数组的情况下计算 1(或添加它们,因为这个值与计数相同)?

我正在创建这样的结构:

int[][] grid = new int[N][N];

不允许任何库解决此问题。

【问题讨论】:

  • 您需要访问每个元素以检查它是否为 1。因此,您必须使用循环。
  • 我对此表示怀疑。您有什么要求?
  • 您也许可以找到一些实用方法来执行此操作。但是 that 将遍历整个数组,所以它只是对你隐藏循环,而不是不这样做。
  • 您可以将其转换为流,但这仍然类似于循环。
  • 为什么有限制,比如必须使用int[N][N]而没有库?这是作业题吗?

标签: java arrays matrix


【解决方案1】:

试试这个。

int[][] grid = {
    {1, 0, 1, 0},
    {0, 0, 0, 0},
    {0, 1, 0, 1},
};
long onesCount = Arrays.stream(grid)
    .flatMapToInt(IntStream::of)
    .sum();
System.out.println(onesCount);  // -> 4

【讨论】:

  • 与其过滤并返回计数,不如使用 IntStream#sum 更容易。
  • 您应该坚持使用Arrays.stream()[Int]Stream.of()
【解决方案2】:

是的

当您创建这个数组时,您应该在插入期间跟踪 1 的数量。

我知道它可能不是您想要的方式,但它可以避免遍历生成的数据结构。

【讨论】:

  • 您还可以在 O(1) 时间内对数组进行排序,方法是使用已排序的数据填充它。
  • "如果我有say的数据结构"
猜你喜欢
  • 2023-03-25
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 2011-04-17
相关资源
最近更新 更多