我只是在处理 LeetCode 问题,罗马到整数,罗马数字到整数的转换,在完成和比较解决方案之后,我注意到列出的解决方案如何描述它们的计算复杂性有一个相当有趣的细微差别。
我将我的解决方案描述为O(n)
与输入元素的数量成线性关系,因为我的解决方案逐个字符地迭代罗马数字的元素。然而,官方解决方案描述了如何使用数字I
、V
、X
、L
、C
、D
和M
,只能表示从 1 到 3999 的数字。他们的论点是,因为 Big O 只考虑最坏的情况,而最坏的情况固定在 3999,所以时间复杂度是恒定的O(1)
,与过程无关。
这引出了一个非常微妙的问题。当我们说“最坏情况下的性能”时,我们是指在任何给定大小的n
情况下,还是在所有n
情况下的最坏情况。对于给定n
的 ,我们是否考虑最坏情况的性能,或者我们是否考虑n
给我们提供全局最坏情况性能的特定选择?