【发布时间】:2018-02-24 19:44:29
【问题描述】:
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,使得数组中大于p的整数个数等于p 如果找到这样的整数,则返回 1,否则返回 -1。 A是用户输入的向量。
我正在 interviewBit.com 上编写这个程序 它显示 MEMORY LIMIT EXCEEDED 如何优化此代码,我尝试使用数组、向量、unordered_map 而不是 map 然后显示分段错误
数组可以包含重复元素和负整数 我使用 map 来跟踪每个元素重复的次数
【问题讨论】:
-
如果您正在寻找有关工作代码的反馈,请考虑在 codereview.stackexchange.com 发帖。
-
你不应该在这里问这个问题!
-
为什么需要地图?排序后从头开始。最后一个值没有比它更大的成员 - 所以它应该是 0 来匹配条件。下一个应该是 1,下一个应该是 2...直到找到匹配或丰富的索引 0。
-
内存限制是多少?
-
@ArtemyVysotsky 地图用于跟踪重复元素(如果有)