在小于O(n)的范围内覆盖arraylist

时间:2019-12-01 02:05:15

标签: algorithm arraylist data-structures

我目前正在开发程序,想将ArrayList转换为数组,但时间少于O(n)。

  for (int i = 0; i < list.size(); i++) {




    if (list.get(i) != null) {
                                 arr[i] = list.get(i);
                             }
                     }

1 个答案:

答案 0 :(得分:0)

如果n是列表的长度,则O(n)在这种情况下意味着您查看列表中的每个元素并将其复制。
现在,您说要转换为小于O(n)的值。这意味着您必须忽略列表中的某些元素。如果不是,它将再次为O(n)。但是您忽略了哪些?请记住,不允许您再次查看所有其他元素,否则将再次出现在O(n)中。
假设您知道列表包含布尔值,其中n / 2为true,其他为false。在最佳情况下,所有真实值都在列表的前半部分。 现在您可以在列表的n / 2处停止迭代,但是您需要再次将false值添加到Array中。现在您又回到O(n)。
让我们做另一个假设。您始终可以忽略列表的最后一个值。这意味着您只迭代n-1次,然后是O(n-1),但是使用大O表示法时,您将忽略常量,因此它将再次获得O(n)。

不可能将列表的所有n个元素都复制到O(n)以下的Array中。