替代O(N ^ 2)时间复杂度,O(1)空间复杂度用于在数组中查找不同的值

时间:2016-03-07 15:38:12

标签: arrays algorithm sorting distinct-values

我正在试图看看是否有任何替代蛮力算法(或略微改进/最差性能的天真蛮力算法)仍然会导致O(N ^ 2)时间复杂度和O(1)辅助空间。

这是我的暴力伪代码:

    procedure distinct(Input: array)                             
        for i=0 to i < length of array                      
            for j=i+1 to j < length of array                 
               if array[i] == array[j] and i != j then  
                  return false                        
               end if
               increment k
            end for
            increment j
        end for
        return true
    end procedure

我知道蛮力算法是一个糟糕的解决方案,有很多方法可以实现更好的性能(使用数据集或实现O(N)时间复杂度和O(1)空间复杂度),但出于纯粹的兴趣我我试图找到O(N ^ 2)最坏情况时间复杂度和O(1)空间复杂度。它甚至可能吗?

我在想我可以应用排序算法(例如冒泡或插入排序),然后使用for循环来完成排序数组,但这仍然会给我一个二次函数而不是O(N ^ 3) ?

1 个答案:

答案 0 :(得分:2)

使用heapsort对数组进行排序,并在找到两个相等的元素时停止:

  • O(NLogN)时间复杂度
  • O(1)空间复杂度

您还可以为此目的寻找其他(更高级的算法)here

选择和插入排序是以下两种选择:

  • O(NxN)时间复杂度
  • O(1)空间复杂度