Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 算法复杂度:在较大数组中查找子数组的起始索引_Java_Arrays_Algorithm_Optimization - Fatal编程技术网

Java 算法复杂度:在较大数组中查找子数组的起始索引

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)时间作为其在后台使用本机算法 通过

关于,我已经找到了使用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+m)
    时间复杂度中使用
    n
    m
    是两个数组的长度,您可以使用上述方法以最佳方式执行此操作

    KMP算法基本上是一种模式匹配算法(大海捞针的起始位置),它适用于字符串。但您可以轻松地将其用于整数数组


    您可以对所有这些实现进行一些基准测试,并选择哪一个足够有效以满足您的需求。

    尝试一下并对它们进行基准测试?虽然我认为需要最少代码的通常是最好的。谢谢。但似乎给定的算法是针对字符串的。它适用于整数数组吗?是的,它将不比较字符数组(字符串)
    str1[i]==str2[j]
    而是比较整数数组
    arr1[i]==arr2[j]
    。字符串的比较字符将比较一个字节,整数将比较其四个字节。没什么不同。