我正在研究一些面试问题,并在这里遇到了这个问题。 Question Image
除了红色框内的部分,我大部分时间都了解所有内容。如果数组中的每个字符串都已排序。然后,不应该对数组进行排序仅取O(log a)吗?为什么将它们乘以O(s)?它解释说,排序时的字符串比较将花费O(s),其中s是最大的字符串大小。这是有道理的...但是,我认为比较看起来像这样...
if ( array[x].equals(array[y]) ) {...}
语句是否采用O(1)的复杂度?那不应该忽略它吗?我可能是错的,但我想我已经读过执行if语句和任何其他嵌入式语句(非循环)将花费O(1)的复杂性。如果我错了,请纠正我,并启发我如何正确地计算复杂度。
答案 0 :(得分:0)
正在排序,因此比较为'a'>'b'。 现在,想象一下您有两个这样的字符串:
'aaaaaaaa'
'aaaaaaab'
需要S个步骤才能到达最后一个字符,以确定哪个字符串更大。每次字符串比较都会执行此操作,因此我们将其乘以S。