Arrays.copyOfRange()的运行时

Ato*_*rce 5 java arrays binary-search

Java的Arrays.copyOfRange(array,startIndex,endIndex)函数的big-O运行时是什么?

例如,就空间和时间复杂度而言,使用copyOfRange在数组函数上编写简单的二进制搜索而不是传递起始索引和结束索引是否等效或效率较低?

alf*_*sin 5

Arrays.copyRangeOf()使用它在幕后System.arraycopy()使用本机代码(例如可以使用memcpy - 取决于 JIT 实现)。

复制背后的“魔力”System.arraycopy()是通过一次调用来复制一块内存,而不是进行n不同的调用。

这意味着使用它Arrays.copyOfRange()比您选择自行实施的任何其他解决方案更有效。

此外,我不明白二分搜索在这里有何帮助:数组可以直接访问 - 并且在这里我们准确地知道 src、dst 以及我们应该复制多少项。

从大 O 的角度来看,复杂性将是O(n*k)n复制的项目数量和k每个项目的大小(以位为单位)。空间复杂度是一样的。