java字符串反向操作最佳时间复杂度:是O(n)还是O(n/2)?
下面是字符串反转的代码段
private static String reverseString(String originalString){
char arr[]= originalString.toCharArray();
char temp;
for(int i= 0,j=arr.length-1;i<(arr.length/2);i++,j--){
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
return new String(arr);
我已经看到很多关于上述字符串反转的时间复杂性的讨论,其中一些人提到复杂性为O(n/2)和一些O(n)
我想了解哪一个是字符串反转的正确时间复杂度
任何洞察都将有助于缓解这里的混乱
# 1 楼答案
在
O(n)
和O(n/2)
之间,渐近没有差异。两者之间的差异是恒定的如果您想计算上述代码段中操作的确切数量,可以更准确地说是3n/2,因为循环的每个迭代包含3个操作。当然,还需要将输入字符串转换为字符数组,反之亦然,这两种转换都需要线性时间
# 2 楼答案
在渐近分析中使用大O符号(从长远来看)
这意味着所有线性函数的时间复杂度都是O(n),T(n)=n/1或n/2或n/3并不重要,因为从长远来看,它们都具有相同的效果