有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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)

我想了解哪一个是字符串反转的正确时间复杂度

任何洞察都将有助于缓解这里的混乱


共 (2) 个答案

  1. # 1 楼答案

    O(n)O(n/2)之间,渐近没有差异。两者之间的差异是恒定的

    如果您想计算上述代码段中操作的确切数量,可以更准确地说是3n/2,因为循环的每个迭代包含3个操作。当然,还需要将输入字符串转换为字符数组,反之亦然,这两种转换都需要线性时间

  2. # 2 楼答案

    在渐近分析中使用大O符号(从长远来看)

    这意味着所有线性函数的时间复杂度都是O(n),T(n)=n/1或n/2或n/3并不重要,因为从长远来看,它们都具有相同的效果