RBT*_*RBT 0 algorithm big-o time-complexity asymptotic-complexity
我在Hacker排名上解决了这个问题.我解决问题的算法是:
- 获取所有玩家分数的数组.迭代所有玩家得分并创建一个新阵列.总共有n个玩家.
其中不包含任何重复的玩家分数.让我们调用新的数组,playerScores.- 让Alice玩的总等级是m.
- 让Alice在第一轮比赛后得分为S.
- 让Alice的初始等级R为0.
- 从后端开始迭代playerScores数组,直到获得分数小于S的玩家得分.
- 将R设置为在步骤5中找到的玩家的等级.
- 将m减少1.
- 打印R.
- 现在开始在循环内的所有后续m-1级别中处理Alice的得分
- 将S设置为Alice的下一级别分数.
- 开始从排名为R-1的玩家向前端迭代playerScores数组.
- 继续迭代,直到你得到一个得分低于S的球员.
- 将R设置为上一步中找到的玩家的等级.
- 将m减少1.
- 打印R.
- 如果还有更多级别要播放,请转到步骤9.1(即m> 0).
现在当我开始计算上述算法的Big O时间复杂度时,我意识到它应该是O(n)如下:
加上上述两个因素,时间复杂度为O(n + n)= O(2n)= O(n).虽然我的朋友声称它是O(n + m)虽然他无法解释它.如果我的O(n + n)复杂度的公式无论如何都有缺陷,任何人都可以帮助我理解它吗?
O(n+m)不同于O(n+n)或O(n)何时你不知道m和之间的关系是什么n.可能有时n可能会比较大,m而其他时间m可能会更大,但没有明确的方法可以说明.但是,如果你总是知道n>=m无论如何,你可以说O(n+m)实际上是O(n).在这种情况下,适用相同的规则.