我想知道下面代码示例的两个变体在技术上是否具有相同的运行时复杂度。
例如(为了说明问题,假设字符串的长度是偶数):
//counting how many times char 'c' appear in the string s
String s = "ascdwcccdweccaaa"; //the "array", contain char 'c' 6 times
int counter = 0; //times char 'c' appear in the string
for(int i=1; i <= s.length()/2; i++)
{
if(s.charAt(i-1) == 'c')
counter++;
if(s.charAt(s.length()-i) == 'c')
counter++;
}
比起这个...
for(int i=0; i < s.length(); i++)
if(s.charAt(i) == 'c')
counter++;
第一个示例使用索引从数组的两端和开始检查,直到它到达数组的中间(假设O(n/2)
)
而第二个例子是从头到尾严格检查数组中的所有字符(据说O(n)
)
在第一个示例中我需要使用两个ifs
,而在第二个示例中我需要使用一个if
。
这两个代码的时间复杂度在技术上是否相同?(考虑到我ifs
在第一个示例中只传递了一半数组时使用了两个,它们是否“均匀”?)