【问题标题】:Time Complexity for removing the smallest value in a sorted array删除排序数组中最小值的时间复杂度
【发布时间】:2014-08-06 11:06:45
【问题描述】:

从具有从小到大排序的 n 个元素的数组中移除最小值的时间复杂度是多少?

我相信它是 O(1),因为最小值是数组的第一个值,这是正确的吗?

【问题讨论】:

  • 定义“删除”
  • 是的,取决于您的型号。我想如果你有 C 的观点,你只需要移动数组指针。

标签: arrays algorithm data-structures big-o time-complexity


【解决方案1】:

是O(n),因为移除元素后,所有其他元素都需要向左移动1个位置。

如果你有一个链接列表,这将不是必需的,所以对于这个数据结构,它是 O(1)。

【讨论】:

  • 如果你记得,数组提供随机访问;)
  • 即使是单链表,也是 O(1)。
  • 我从来没有说过不是,但我还是编辑了我的答案。
【解决方案2】:

要从数组中删除一个元素,您首先要找到它,在您的情况下需要O(1),因为:smallest = array[0]

但是删除它需要您将所有元素从 n 转移到 n-1,这将需要遍历整个数组并转移元素。

int* removeSmallest(int *arr)
{
    //int smallest = arr[0]; // O(1)

    //shift elemts
    for(int i = 0; i < sizeof(arr)-1; i++) // O(n)
    {
        arr[i] = arr[i+1];
    }

    return arr;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 2021-03-05
    • 2022-01-22
    • 2020-10-27
    相关资源
    最近更新 更多