我正在研究黑客等级问题。 重复的字符串 [1]:https://www.hackerrank.com/challenges/repeated-string/problem
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)
}
我收到输入错误 一个 万亿
我的代码的输出是 &lt; ---最后几个GC ---&gt;
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].
&lt; --- JS stacktrace ---&gt;
==== JS堆栈跟踪======================================== =
安全上下文:0x10178c2cfb51 2:main [/run-N6KBYU8cQzCneXKH0Tbm/solution.js:~30] [pc = 0x2859725aec0](这= 0x10178c2e6119) 3:/ *匿名* / [/run-N6KBYU8cQzCneXKH0Tbm/solution.js:21] [pc = 0x2859725717e](这= 0x2af8d3a77e81) 4:emitNone(aka emitNone)[events.js:91] [pc = 0x28597256c33](这= 0x10178c204381,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 *,bool) [/ usr / local / nodejs-binary / bin / node] 5: V8 ::内部::厂:: NewUninitializedFixedArray(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
答案 0 :(得分:1)
找到一个有效的算法是个问题。你不能用蛮力来解决这些问题。
故意将 n
设置为高值,这样您就不会尝试暴力。 10^12
为1 Trillion
,即使您可以在one nano second
中运行循环的每次迭代,也需要1000 seconds
,这很长,因为在{{}}中无法运行每次迭代{1}}。
您遇到的问题是由于one nano second
,您试图在内存中存储Space complexity
(最大值)字符。如果每个字符都需要(n=10^12)
,那么我们需要的内存大小是
1 byte
我确信你的程序不会给你那个记忆。鉴于必须有其他人同时试图解决这个问题。 10^12 bytes = 1000 Giga bytes = 1 Terra byte
无法为所有人提供这么多资源。
问题从未打算将此值存储在内存中。有意为您找到一种解决问题的聪明方法,而无需存储所有值。
现在聪明的方法是,您可以计算Hackerrank
中a
的数量s
。现在您要做的就是找出如果您只有s
个字符,可以重复多少个字符串n
。
下面的剧透(点击/悬停以查看答案):
这可以由
Math.floor(n / s.length)
计算。现在可能在末尾有一些剩余的字符串,其长度为n % s.length
。所以解决方案是count = Math.floor(n / s.length) * CountAsIn(s) + CountAsIn(s.substring(n % s.length))