java - 算法复杂度分析混淆

标签 java algorithm

static int sumAfterPos(int[] A) {
  int N = A.length;
  for (int i = 0; i < N; i += 1) {
    if (A[i] > 0) {
      int S;
      S = 0;
      for (int j = i + 1; j < N; j += 1) {
        S += A[j];
      }
      return S;
    }
  }
  return 0;
}

我无法确定此代码是在 O(n^2) 还是 O(n) 中运行。我不确定return S 是否会对运行时产生很大的影响。

最佳答案

O(N)及时。

例如,A[K] > 0 , 那么你已经有了 K脚步。然后你运行另一个 N-K步骤和返回。所以你完全有 O(N) .

假设所有A[i] < 0 ,这将使内部循环消失。所以是O(N)在这种情况下。

现在让我们说,A[0] > 0 ,这将使外循环仅重复一次,内循环将从 1 运行到 N - 1,因此总共有 1 + (N-1 - 1 + 1) = N。

现在让我们说,A[1] > 0 ,这将使外循环仅重复两次,而内循环将从 2 运行到 N - 1,因此总共有 2 + (N-1 - 2 + 1) = N。

...

现在让我们说,A[k] > 0 ,这将使外循环仅重复 k + 1 次,而内循环将从 k + 1 运行到 N - 1,因此总共有 k + 1 + (N-1 - k -1 + 1) = N。

现在让我们说,A[N-1] > 0 ,这将使外循环只重复 N 次,而内循环永远不会运行,所以总共有 N 次。

关于java - 算法复杂度分析混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26331724/

相关文章:

java - Neo4j Iterable<String> getPropertyKeys() 无限循环?这是一个错误吗?

java - 在彼此的方法中调用类中的方法

algorithm - 如何连接循环双向链表

algorithm - 在流图中搜索具有满足能力的最小流

ruby - 我可以从这个哈希中得到多少种可能的组合?

java - 我该如何解决这个 Java 继承问题?

java - 如何从 XPages (java) 中的 POST 检索参数

java - Selenium 服务器集线器设置为特定的 IP 和端口

algorithm - 图分析算法的实现细节

algorithm - 如何找到二维矩阵中的 Blob 数?