java - 我的带有 for 循环的二进制搜索算法的大 O?

标签 java big-o time-complexity binary-search

我正在努力使我的算法运行时间尽可能短。

这个算法的运行时间是多少?是 O(log n) 还是 O(n log n) 因为 for 循环?

import java.util.Arrays;

public class countDifferenceBetweenTwoArrays {
  private static int countDifference(int[] arrayA, int[] arrayB) {
    int differenceCount = 0;
    for (Integer i : arrayA) {
      if (Arrays.binarySearch(arrayB, i) < 0) {
        differenceCount++;
      }
    }
    for (Integer i : arrayA) {
      if (Arrays.binarySearch(arrayB, i) < 0) {
        differenceCount++;
      }
    }
    return differenceCount;
  }

最佳答案

您的实现是 O(nlog(n))。您遍历每个数组,这是一个复杂度为 O(n) 的操作。在每次迭代中,您执行 O(log(n)) 二进制搜索操作。这为您提供了 O(nlog(n)) 的运行时间来处理每个数组。你这样做了两次,但我们忽略了常数因子 2,使整个函数的复杂度为 O(nlog(n))。

关于java - 我的带有 for 循环的二进制搜索算法的大 O?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35447207/

相关文章:

java - 当前代码运行时仅返回值 0

arrays - O(n) 时间 k 排序数组中元素的最小跨度窗口组合

java - 最大值的预期数量

python - 这是我的递归方法的问题吗?

java - 哈希表/插入新键和值

java - 为什么我的集合没有添加所有元素?

java - 维护 Java 应用程序配置文件的最佳方法

java - 让 Jersey 2.x 拒绝内容长度不正确的请求的最佳方法?

arrays - 无法理解寻峰算法的差异

c++ - 确定两个字符串是否互为排列的程序的时间复杂度