在C 中超过内存限制
memory limit exceeded in c++
int Solution::solve(vector<int> &A)
{
sort(A.begin(), A.end());
map<int, int>ma;
int m;
for (int i = 0; i<A.size(); i++)
ma[A[i]] = 1;
for (int i = 0; i<A.size(); i++)
ma[A[i]]++;
if (A.size() == 1 && A[0] == 0)
return 1;
if (ma[A[0]] == (A.size() + 1))
return -1;
for (int i = 0; i<A.size(); i++)
{
if (ma[A[i]]>2 && ma[A[i]]>0)
{
m = A.size() - (i + 1) - (ma[A[i]] - 2);
ma[A[i]] = -1;
}
if (ma[A[i]] == 2)
m = A.size() - (i + 1);
if (m == A[i])
{
return 1;
}
}
return -1;
}
给定整数数组,查找整数p是否存在于数组中如果找到这样的整数返回1 else 1返回-1。A是用户的向量输入。
我正在访谈bit.com上编写此程序它显示内存限制超过我如何优化此代码,我尝试使用数组,矢量,unordered_map而不是映射,然后显示分段故障
数组可以具有重复的元素和负整数我已经使用映射来跟踪每个元素重复多少次
这个问题背后的想法是您如何弄清楚多少项目大于数组中的给定值,而无需使用任何其他内存。
订购数组后,这很容易执行:从数组大小中减去当前的一个基于一个基于一个的位置。
因此,您可以通过订购数组,然后走一次来解决此问题,然后检查每个位置的a[i] == a.size()-i-1
。
注意:如果允许数组中的数字相等,问题可能会变得更加困难。在这种情况下,您需要在检测到相等范围的开始后继续行走阵列。
无需使用地图。在排序之后;只需从数组的末端进行计数元素,然后将此计数与即将到来的元素进行比较。
更新:甚至更好 - 在降序中排序数组,并检查任何元素是否等于其索引。
将nth_element与二进制搜索结合可能会在o(〜2n logn)中获得o(n)。
完全未经测试的代码:
auto start = v.begin();
auto last = v.end();
while(start != last) {
auto half = (std::distance(start, last)/2);
auto median = start + half;
std::nth_element(start, median, last);
auto med = *median;
if (med > half) {
if (*median > std::distance(median, v.end()))
return -1; // early out
last = median;
} else {
if (*median < std::distance(median, v.end()))
return -1; // early out
start = median;
}
}
if (*start == std::distance(start, v.end())
return 1;
return -1;
todo:测试,测试和检查一个
相关文章:
- 将字符串存储在c++中的稳定内存中
- 迭代时从向量和内存中删除对象
- 类型总是使用其大小存储在内存中吗
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- 我们可以删除链表中静态内存中的节点吗
- 我无法从内存中读取值
- 如何在 malloc 内存中初始化非 POD 数据
- 为什么字符串的 move() 会改变内存中底层数据的位置?
- 使用 OpenSSL 从内存中读取原始 SSL/TLS 证书
- 为什么堆栈和堆在内存中分离得如此之多?
- C++,您能否设计一种数据结构,将指针保存在连续内存中并且不会使它们失效?
- 公共/私有/受保护是否会更改内存中结构的排列?
- 是否可以通过每次在内存中仅保存一个平铺来处理完整的平铺 tiff 图像?
- 准确了解对象在内存中的映射方式
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 确保内存映射页位于内存中
- 在共享缓冲区内存中创建 ::std::string 对象
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 内存中类位置的成员是否取决于类成员在类定义中的位置?