java - 数组函数的时间复杂度

标签 java arrays time-complexity

我编写了一个函数来查找目标值应插入给定数组中的位置。我们假设数组具有不同的值并且按升序排序。我的解决方案时间复杂度必须为 O(log N)

public static int FindPosition(int[] A, int target) {


    int a = A.length / 2;
    System.out.println(a);
    int count = a;
    for (int i = a; i < A.length && A[i] < target; i++) {
        count++;
    }
    for (int i = a; i > A.length && A[i] > target; i--) {
        count++;
    }
    return count;
}

这段代码的复杂度是 O(log N) 吗?

最佳答案

简短回答

没有。

更长的答案

随着索引中 1 的增量,您不能期望得到比 O(n) 更好的解决方案。

如果你的算法完全有效(我不认为有效),看起来它需要 O(n) 步骤。

此外,你说你假设数组已排序,但你还是对其进行了排序。所以你的代码是O(n*log(n))

此外,尝试对已排序的数组进行排序对于某些排序算法来说是最坏的情况:甚至可能是 O(n**2)

您正在寻找binary search .

关于java - 数组函数的时间复杂度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43575390/

相关文章:

java - 将字符附加到加载到内存中的文件的最快/最有效的方法是什么?

java - JNA 分配缓冲区 FIXED_INFO 抛出无效的内存访问

vb.net - 能否在 Visual Basic 2008 中禁用数组边界检查

php - preg_match - 创建数组的正则表达式

python - 以尽可能低的时间复杂度,从列表中第一个较小的数字中减去列表中的每个数字

algorithm - 时间复杂度伪代码

java - Maven 提示对 WAR 文件的依赖

java - 模拟 firebase android 应用程序

arrays - 在 Rust 中,我可以在不对值进行硬编码的情况下实例化我的 const 数组吗?编译时评估?

algorithm - 邻接表表示的时间复杂度?