C++ 运行少量数字时超出内存限制
C++ Memory Limit Exceeded when running small numbers
我正在为一个名为voff Iceland.Kattis.Com 的问题编写代码,在该代码中,您必须计算产生一定频率的吠叫所需的狗的数量。
有 N 种吠叫,每只狗每 K 秒最多可以吠一次。输入的第一行包含 N 和 K,第二行包含听到吠叫的时间。
我制作了一个python代码,它几乎足够快,可以得到100分,但只是有点害羞。所以我决定编写相同的代码,但在C++(clang 7.0.0-3~ubuntu0.18.04.1(中,当我运行除第一个测试用例以外的任何其他测试用例时,我得到了超出模因限制。
我尝试使用"长长","无符号长长"和"int",但我在所有这些上都超出了内存限制。
#include <bits/stdc++.h>
using namespace std;
int main() {
int N, K;
vector<int> barks;
vector<int> dogs;
dogs.push_back(0);
cin >> N >> K;
for(int i = 0; i < N; i++){
int inp;
cin >> inp;
barks.push_back(inp);
}
for(int bark : barks){
for(int i = 0; i < dogs.size(); i++){
if (bark >= dogs[i]){
dogs[i] = bark + K;
break;
} else {
dogs.push_back(bark + K);
}
}
}
cout << dogs.size() << endl;
}
输入第一个测试用例时,输出应该是"1"。但是当运行任何其他测试用例时,它会超过内存限制。
你最终会得到无限数量的狗,因为你在for i
循环中添加的每只狗都无法通过bark >= dogs[i]
测试,从而导致添加另一只狗,依此类推。
将您的代码更改为在没有符合条件的狗时仅添加一只狗有效:
for (int bark : barks) {
bool found = false;
for (int i = 0; i < dogs.size(); i++) {
if (bark >= dogs[i]) {
dogs[i] = bark + K;
found = true;
break;
}
}
if (!found)
{
dogs.push_back(bark + K);
}
}
附言不要使用#include <bits/stdc++.h>
,它是非标准的,仅适用于某些平台,仅包含您需要的c ++标头(例如 <iostream>
和<vector>
(代替。 using namespace std
也可能导致问题。
相关文章:
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 在运行时为动态分配的内存输入值
- 如何运行外部程序,向其传递内存地址以读取/写入?
- 如何配置bazel以运行地址/内存清理器?
- 为什么我的C 代码在Linux上运行,而在Windows上不运行,是否有RAM内存的问题
- Visual C 运行时:Malloc将指针返回到已经使用的内存(包含实际字符串)
- C 获得运行时间和内存使用量
- cv:内存位置的异常 - 运行 openCV 代码 Visual Studio 2013 & Visual Studio 2017 - Windows 7
- malloc - 运行时内存指针类型分配
- PostgreSQL在DB服务器中消耗更多内存,以进行长期运行的连接
- 如何在以下C程序中计算运行时间内存和最大数据存储器使用情况
- 降低CUDA内核运行时:内核中矩阵的动态内存分配
- 运行实验的好方法是C 中算法的内存使用情况
- 在多次运行C++程序时将巨大的矩阵保存在内存中
- C++ 运行少量数字时超出内存限制
- 为什么在 v8 中运行嵌入在 c++ 中的非常简单的脚本会占用内存?
- 在动态内存分配中出现运行时错误
- Windows是否支持从内存运行程序
- 如何正确管理内存(运行时)C++
- 内存运行时错误:我们在哪里删除这个指针