您如何计算内部具有功能的功能的时间复杂度?

How do you calculate time complexity for a function that has function within?

我不确定问这样一个基本问题是否合适,但我只是想知道如何计算一个内部有另一个函数的函数。

根据我对大O表示法的理解,如果只有多个非嵌套的for循环,那么就是O(n),并且根据嵌套循环的数量,增加n的平方。

但是当函数中有辅助函数以及 while 循环和 for 循环时,像下面这样的函数怎么样。

function solution(nums) {
  let container = [];
  let zero = 0;
  let one = 1;
  let two = 2;
  let answer = 0;

  function isPrime(n) {
    for (let i = 2; i < n; i++) {
      if (n % i === 0) {
        return false;
      }
    }
    return true;
  }

  while (nums) {
    container.push(nums[zero] + nums[one] + nums[two]);
    two++;
    if (two === nums.length) (one++, two = one + 1);
    if (one === nums.length -1) (zero++, one = zero + 1, two = one + 1);
    if (zero === nums.length-2) break;
  }
  for (let i = 0; i < container.length; i++) {
    if (isPrime(container[i]) === true) answer++;
  }
  return answer;
}

我读过几篇关于它的文章,我猜上面的函数是 O(n log n)?很抱歉问这个问题。我是初学者,我没有社区或任何人可以问。我一直听说这个地方是获得编程问题答案的“地方”。

提前致谢!!

复杂度为O(n^2)

内部函数的 (isPrime()) 复杂度本身是 O(i),其中 i 是它的输入。

由于容器中的每个值都会调用isPrime(),而容器中包含O(n)个元素,在上一个循环中被填满后,它要做的操作总数是: O(1 + 2 + 3 + ... + n).

现在,1 + 2 + .... + nSum of arithmetic progression,它本身在 O(n^2) 中,因此你的解决方案 () 是 O(n^2)