当前位置: 首页 > 知识库问答 >
问题:

如何在JavaScript中处理for循环中的大量数据?

叶越
2023-03-14
function main() {
    var s = readLine();
    var n = parseInt(readLine());
    var rep = 0;
    var repArray = []

//calculate each case 

  while(repArray.length < n){
      for(let j = 0; j < s.length; j++){
           if(repArray.length > n){
              break;
         }
          repArray.push(s[j])
      }
  }

  for(let a = 0; a < repArray.length; a++){
     if(repArray[a] === 'a'){
          rep++
      } 
  }
  console.log(rep)
}
1836 ms: Mark-sweep 597.4 (605.3) -> 359.7 (368.6) MB, 101.7 / 0.0 ms [allocation failure] [GC in old space requested].
1938 ms: Mark-sweep 359.7 (368.6) -> 359.7 (368.6) MB, 102.3 / 0.0 ms [allocation failure] [GC in old space requested].
2040 ms: Mark-sweep 359.7 (368.6) -> 359.7 (367.6) MB, 101.6 / 0.0 ms [last resort gc].
2142 ms: Mark-sweep 359.7 (367.6) -> 359.7 (367.6) MB, 101.7 / 0.0 ms [last resort gc].

<---JS StackTrace--->

=====JS栈迹===================================================================

安全上下文:0x10178C2CFB51 2:main[/run-N6KBYU8CQZCNEXKH0TBM/solution.JS:~30][PC=0x2859725AEC0](this=0x10178C2E6119)3:/*匿名*/[/run-N6KBYU8CQZCNEXKH0TBM/solution.JS:21][PC=0x2859725717E](this=0x2AF8D3A77E81)4:emitNone(又名emitNone)[events.JS:91][PC=0x28597256C33](Handler=0x2AF8D3A78049,是...

致命错误:CALL_AND_RETRY_LAST分配失败-JavaScript堆内存不足1:node::abort()[/usr/local/nodejs-binary/bin/node]2:0x1098b2c[/usr/local/nodejs-binary/bin/node]3:v8::Utils::reportapifailure(char const*,char const*)[/usr/local/nodejs-binary/bin/node]4:v8::internal::v8::fatalprocessoutofmemory(char const*,(int)[/usr/local/nodejs-binary/bin/node]6:0xC4553F[/usr/local/nodejs-binary/bin/node]7:v8::internal::runtime_growarrayElements(int,v8::internal::object**,v8::internal::isolate*)[/usr/local/nodejs-binary/bin/node]8:0x285971079a7

共有1个答案

石正奇
2023-03-14

寻找一个有效的算法是一个问题。你不能用蛮力来解决这类问题。

n故意设置为较高的值,这样您就不会试图使用暴力。10^121万亿次,即使您可以在1纳秒中运行循环的每个迭代,也需要1000秒,考虑到不可能在1纳秒中运行每个迭代,这是很长的时间。

您面临的问题是,由于空间复杂性,您试图在内存中存储(n=10^12)(Max value)字符。如果每个字符1字节,那么我们需要的内存大小是

10^12 bytes = 1000 Giga bytes = 1 Terra byte

您在内存中存储此值时从未遇到过问题。意图是让你找到一个聪明的方法来解决它,而不需要存储所有的价值。

现在,聪明的方法是可以计算s中有多少a。现在所要做的就是找出如果只有n字符,可以重复多少字符串s

下面剧透(点击/悬停查看答案):

 类似资料:
  • 问题内容: 我试图用NodeJS编写代码,从外部API抓取数据,然后使用Mongoose在MongoDB中填充它们。在这之间,我将检查该特定对象是否已经存在于Mongo中。下面是我的代码。 我的问题是,由于NodeJS回调是并行的,因此不会按顺序调用它。我的最终结果将是这样的: 呼叫报告API console.log(长度)= 100 ^^^^^^^^^^^^^^^^^^^^^^^^^ conso

  • 问题内容: 这个问题已经在这里有了答案 : 循环内的JavaScript封闭-简单的实际示例 (44个答案) 2年前关闭。 我正在运行以下形式的事件循环: 我正在尝试显示一系列警报,显示从0到10的数字。问题是,当触发回调函数时,循环已经经历了几次迭代,并且显示了更高的值。有关如何解决此问题的任何建议? 问题答案: 在启动所有异步操作时,循环将立即运行到完成。当他们将来完成某个时间并调用其回调时,

  • 问题内容: 我有几个div的,,,…和要指派点击处理对他们说: 但是,我没有得到单击时的显示(就像其他所有单击一样)。我究竟做错了什么? 问题答案: 在Javascript 中的循环中创建闭包是一个常见的错误。您需要具有以下某种回调函数: 由于这个问题仍然受到关注,并且ES6也越来越受欢迎,因此我建议使用一种现代的解决方案。如果您编写ES6,则可以使用关键字,它使变量在循环本地而不是全局: 它更短

  • 如果我像下面这样做一个异步调用,如何将它们与promise联系起来,这样我就可以按顺序做事了?在这个例子中,最终发生的是会将项按顺序推入。我更喜欢有promise的回答,但只要有效,什么都行

  • 问题内容: 我有一个数组(称为),其中包含数百个天文学图像文件的名称。然后处理这些图像。我的代码有效,并且需要几秒钟来处理每个图像。但是,一次只能执行一张图像,因为我是通过循环运行阵列: 没有理由我必须先修改映像,因此可以利用计算机上的所有4个内核,每个内核都通过for循环在不同的映像上运行吗? 我已经阅读了有关该模块的信息,但是不确定如何在我的情况下实现它。我热衷于工作,因为最终我必须在10,0

  • 问题内容: 我刚接触Python,但仍处于学习曲线的艰难阶段。感谢您的任何评论。 我有一个很大的for循环要运行(在许多迭代中都很大),例如: 我虽然认为这将是一个如何并行化的常见问题,但在Google上搜索了数小时后,我使用“多重处理”模块找到了解决方案,如下所示: 当循环较小时,此方法有效。但是,如果循环很大,这确实很慢,或者如果循环太大,有时会发生内存错误。看来python会首先生成参数列表