【问题标题】:Is it possible to insert a number into a sorted array, time: log(n) [closed]是否可以将数字插入排序数组,时间:log(n)[关闭]
【发布时间】:2016-10-10 17:38:18
【问题描述】:

我有一个排序的整数数组(大小为 n),并且想在数组中插入一个新元素,是否可以在 O(log(n)) 中这样做?我需要保持插入并找到 O(log(n))) 的计算复杂度。

现在我唯一的想法是进行二进制搜索以找到所需的插入索引 - 这需要 O(log(n)),但是我必须创建一个新数组并复制整个需要 O(n) 的单元格。

编辑:
它是通过使用AVL Tree 来解决的,这样添加的任何新元素都需要 O(log(n)) 并找到一个元素需要 O(log(n))

【问题讨论】:

  • 请提供更多详细信息。我们不是魔术师,可以看到你在做什么,就像我们想成为其中的一员一样。
  • 是的,你有最好的算法,但移动所有元素将是 O(n)。这是你能做到的最好的。
  • 如果是数组,即一个连续的内存区域,并且元素是排序的整数,然后根据定义在数组的开头插入一个元素需要推送所有其他元素。话虽如此,如果您只需要一个“数组接口”,那么其他数据结构将为您提供所需的东西。例如 C++ std::vector 插入了 lof(n)。

标签: java arrays sorting time


【解决方案1】:

“是否可以在 log(n) 中这样做?” - 简而言之,不。根据我的回忆和经验,插入 array 中的任意位置总是 O(N),几乎按照定义。如果您想要更快的性能,请使用 TreeMap 类。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-16
    • 2023-03-06
    • 1970-01-01
    • 2023-03-27
    • 2019-08-19
    • 2014-02-05
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多