我想知道如何计算第二秒钟的大O,而当重复次数持续下降。重复检查功能的大O
int duplicate_check(int a[], int n)
{
int i = n;
while (i > 0)
{
i--;
int j = i - 1;
while (j >= 0)
{
if (a[i] == a[j])
{
return 1;
}
j--;
}
}
return 0;
}
所以说是正确的,如果在某些时候内循环运行相当于O(n),即使之后运行n-1,...,n-3,.... nk假设外循环运行O(n),内循环仍然是O(n^2)?真正重要的是在最坏的情况下循环运行的时间是多少? –
同意:“可以通过对数组”O(nlogn)“进行排序来更有效地解决这个问题”然而,这可以更好吗?嗯。听起来类似于[生日悖论](https://en.wikipedia.org/wiki/Birthday_problem) – chux
@VanderIg是大O是最坏的情况下测量。 @Chux也许还有其他的方法比'O(nlogn)'更好,但我不知道任何东西。此外,我认为生日悖论仅适用于有限数量的选项(366)。 – twain249