javascript 在O(nlog(n))时间复杂度内找到所有子阵

nnsrf1az  于 2023-02-11  发布在  Java
关注(0)|答案(2)|浏览(125)

如何使用javaScript在O(nlog(n))时间复杂度内获得所有子数组
我尝试使用嵌套循环,但时间复杂度是O(n*n)。我听说过一些前缀解决方案,但没有任何信息

yjghlzjz

yjghlzjz1#

验证码:

fetechArray = (array) => {
    for ( let subarray of array ){
      // ur code here
      fetechArray(subarray);
    }
}
polhcujo

polhcujo2#

使用“分而治之”的方法。你首先把原始数组分成两半,然后把两半的结果结合起来得到所有的子数组。

function subArrays(arr) {
  if (arr.length === 1) {
    return [arr];
  }

  const mid = Math.floor(arr.length / 2);
  const left = arr.slice(0, mid);
  const right = arr.slice(mid);

  const leftSubArrays = subArrays(left);
  const rightSubArrays = subArrays(right);

  return merge(leftSubArrays, rightSubArrays);
}

function merge(left, right) {
  const result = [];

  for (let i = 0; i < left.length; i++) {
    for (let j = 0; j < right.length; j++) {
      result.push(left[i].concat(right[j]));
    }
  }

  return result;
}

相关问题