如何使用javaScript在O(nlog(n))时间复杂度内获得所有子数组我尝试使用嵌套循环,但时间复杂度是O(n*n)。我听说过一些前缀解决方案,但没有任何信息
yjghlzjz1#
验证码:
fetechArray = (array) => { for ( let subarray of array ){ // ur code here fetechArray(subarray); } }
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; }
2条答案
按热度按时间yjghlzjz1#
验证码:
polhcujo2#
使用“分而治之”的方法。你首先把原始数组分成两半,然后把两半的结果结合起来得到所有的子数组。