Javascript 是否有更有效的算法来展平阵列?
我知道将嵌套数组展平的递归方法。 stackoverflow有几种解决方案(包括内置库和内置库) 但是这些解的时间复杂度是O(n^2)! 我想知道是否有一种算法可以做得更好Javascript 是否有更有效的算法来展平阵列?,javascript,java,arrays,algorithm,Javascript,Java,Arrays,Algorithm,我知道将嵌套数组展平的递归方法。 stackoverflow有几种解决方案(包括内置库和内置库) 但是这些解的时间复杂度是O(n^2)! 我想知道是否有一种算法可以做得更好 提前感谢您的帮助 要么您弄错了,要么您将n定义为要处理的元素数的平方根 阵列展平问题的所有合理解决方案都是O(n),其中n取决于元素的总数(因为,本质上,您需要扫描所有元素,每个元素只扫描一次)。展平数组不是一个算法问题,只是将其放入一个“优雅”的片段中的问题。您可能弄错了,或者您将n定义为要处理的元素数的平方根 阵列展平问
提前感谢您的帮助 要么您弄错了,要么您将n定义为要处理的元素数的平方根
阵列展平问题的所有合理解决方案都是O(n),其中n取决于元素的总数(因为,本质上,您需要扫描所有元素,每个元素只扫描一次)。展平数组不是一个算法问题,只是将其放入一个“优雅”的片段中的问题。您可能弄错了,或者您将n定义为要处理的元素数的平方根
阵列展平问题的所有合理解决方案都是O(n),其中n取决于元素的总数(因为,本质上,您需要扫描所有元素,每个元素只扫描一次)。展平数组不是一个算法问题,只是将其放入一个“优雅”的片段中的问题。它们看起来像O(n),其中n是元素数。我看不出你怎么会比这更好。你指的是数组的n维吗?但如果n是元素的个数,它被认为是O(n),那么你链接的JavaScript问题中“亚当”的答案是线性的,而不是二次的@VinceEmigh当在线性时间内做这件事很琐碎时是不合理的:)@PeterLawrey好吧,使用某种数组连接函数的版本实际上不是线性的,但是如果忽略动态大小数组的成本,通过构建单个累加器数组来做这件事是线性的。它们看起来像O(n)其中n是元素数。我看不出你怎么会比这更好。你指的是数组的n维吗?但如果n是元素的个数,它被认为是O(n),那么你链接的JavaScript问题中“亚当”的答案是线性的,而不是二次的@VinceEmigh当在线性时间内做这件事很琐碎时是不合理的:)@PeterLawrey好吧,使用某种数组连接函数的版本实际上不是线性的,但是如果忽略动态大小数组的成本,通过构建单个累加器数组来做这件事是线性的。我明白了。如果我错了,请纠正我,但可以安全地说它是伪多项式吗?@KarthikVasishta big-O始终是多项式的最高阶。谢谢@PeterLawrey“你需要扫描它们所有,每个只扫描一次”。对于Java来说,情况并非如此。因为Java数组的大小是固定的,所以在开始构建它之前,必须预先扫描数组以找到结果的元素总数。不过仍然是O(n)。@Andreas:我很欣赏你的挑剔:-)但是如果我们在这个层次上解释事情,问题就不是真的了——Javascript中没有“数组”(除非你计算类型化数组API,它不是ECMA的一部分)——因此,仅仅向Javascript“数组”添加n个元素的成本可能会让我们绕过NlogN在我的回答中,我假设Javascript“数组”的等价物是Java的LinkedList:-)我明白了。如果我错了,请纠正我,但可以安全地说它是伪多项式吗?@KarthikVasishta big-O始终是多项式的最高阶。谢谢@PeterLawrey“你需要扫描它们所有,每个只扫描一次”。对于Java来说,情况并非如此。因为Java数组的大小是固定的,所以在开始构建它之前,必须预先扫描数组以找到结果的元素总数。不过仍然是O(n)。@Andreas:我很欣赏你的挑剔:-)但是如果我们在这个层次上解释事情,问题就不是真的了——Javascript中没有“数组”(除非你计算类型化数组API,它不是ECMA的一部分)——因此,仅仅向Javascript“数组”添加n个元素的成本可能会让我们绕过NlogN在我的回答中,我假设Javascript“数组”的等价物是Java的LinkedList:-)