|
|
1
3
你原来的程序在我的机器上需要3.5秒。对你来说是不是太慢了? 我肮脏丑陋的版本需要0.3秒。它使用全局数组存储已计算的值。在以后的计算中使用它们。
|
|
|
2
1
考虑到这基本上是一个丢弃程序(即,一旦你运行了它并得到了答案,你将多年不支持它),我建议使用一个全局变量来保存已经计算的序列长度:
如果您的最大容量是几百万,那么我们将讨论兆字节的内存,它应该可以很容易地立即放入RAM中。 上面将在启动时将数组初始化为零。在您的程序中-对于每个迭代,检查数组是否包含零。如果是这样,你就得继续计算了。If not - then you know that carrying on would go on for that many more iterations, so just add that to the number you've done so far and you're done. 当然,然后将新结果存储在数组中。 不要试图对这种大小的数组使用局部变量:这将尝试在堆栈上分配它,因为堆栈不够大,可能会崩溃。
另外-记住,使用这个序列,值会上下移动,因此您需要在程序中处理这个问题(可能是通过让数组比上下移动的值长,并使用
|
|
3
1
如果我没记错的话,你的问题不是一个缓慢的算法:你现在拥有的算法足够快,可以满足体育课的要求。问题是溢出:有时你的数字会被乘以3倍,以至于最终会超过可以存储在有符号整数中的最大值。使用无符号整数,如果仍然不起作用(但我很确定它起作用),使用64位整数。(
这应该运行得很快,但是如果你想做得更快,其他的答案已经解决了这个问题。 |
|
|
MaPo · Linux,设置锁定ICMP_过滤器选项 11 月前 |
|
Doohyeon Won · 内联函数上的奇怪现象?[关闭] 11 月前 |
|
|
Bobby · 复合字面值总是左值吗? 12 月前 |
|
9-Pin · C: 嵌套结构的堆栈内存分配 12 月前 |