Java 算法复杂度:在较大数组中查找子数组的起始索引
关于,我已经找到了使用Java Collections API获取索引的公认答案。我的问题是有那么多其他的方法来解决给定的问题,哪种方法是最优的Java 算法复杂度:在较大数组中查找子数组的起始索引,java,arrays,algorithm,optimization,Java,Arrays,Algorithm,Optimization,关于,我已经找到了使用Java Collections API获取索引的公认答案。我的问题是有那么多其他的方法来解决给定的问题,哪种方法是最优的 使用两个循环 使用排序和二进制搜索 使用排序和合并 使用散列 使用集合api 使用两个循环将花费O(n^2)时间 使用排序和二进制搜索将花费O(nlog n)时间 使用排序和合并O(nlog n)time 使用哈希将花费O(k*n)时间以及一些其他开销和额外空间 Use Collections api将花费O(n^2)时间作为其在后台使用本机算法 通过
O(n^2)
时间O(nlog n)
时间O(nlog n)
timeO(k*n)
时间以及一些其他开销和额外空间O(n^2)
时间作为其在后台使用本机算法O(n+m)
时间复杂度中使用n
和m
是两个数组的长度,您可以使用上述方法以最佳方式执行此操作
KMP算法基本上是一种模式匹配算法(大海捞针的起始位置),它适用于字符串。但您可以轻松地将其用于整数数组
您可以对所有这些实现进行一些基准测试,并选择哪一个足够有效以满足您的需求。尝试一下并对它们进行基准测试?虽然我认为需要最少代码的通常是最好的。谢谢。但似乎给定的算法是针对字符串的。它适用于整数数组吗?是的,它将不比较字符数组(字符串)
str1[i]==str2[j]
而是比较整数数组arr1[i]==arr2[j]
。字符串的比较字符将比较一个字节,整数将比较其四个字节。没什么不同。