Time Complexity用于删除已排序数组中的最小值

时间:2014-06-16 15:10:02

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

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

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

2 个答案:

答案 0 :(得分:4)

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

如果你有一个链表,那就不一定了,所以对于这个数据结构,它就是O(1)。

答案 1 :(得分:3)

要从数组中删除元素,首先要查找它,在您的情况下需要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;
}