Arrays 备选方案O(N^2)时间复杂度和O(1)空间复杂度,用于在数组中查找不同的值
我正在尝试看看是否有任何替代暴力算法的方法(或对原始暴力算法的轻微改进/最差性能),仍然会导致O(N^2)时间复杂度和O(1)辅助空间 这是我的暴力伪代码:Arrays 备选方案O(N^2)时间复杂度和O(1)空间复杂度,用于在数组中查找不同的值,arrays,algorithm,sorting,distinct-values,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
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
过程不同(输入:数组)
对于i=0到i<数组长度
对于j=i+1到j<数组长度
如果数组[i]==数组[j]和i!=那么
返回错误
如果结束
增量k
结束
增量j
结束
返回真值
结束程序
我知道暴力算法是一个糟糕的解决方案,有很多方法可以实现更好的性能(使用数据集或实现O(N)时间复杂度和O(1)空间复杂度),但是出于纯粹的兴趣,我试图找到O(N^2)最坏情况下的时间复杂度和O(1)空间复杂度。有可能吗
我在想,我可能会应用排序算法(例如冒泡排序或插入排序),然后使用for循环遍历已排序的数组,但这是否仍然会给我一个二次函数而不是O(N^3)?使用heapsort对数组排序,并在找到两个相等的元素时停止:
- O(NLogN)时间复杂度
- O(1)空间复杂性
- O(NxN)时间复杂度
- O(1)空间复杂性