从具有从最小到最大排序的n个元素的数组中删除最小值的时间复杂度是多少?
我相信它是O(1)因为最小的值是数组的第一个值,这是正确的吗?
答案 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;
}