[英]What is causing the Stack Buffer Overflow?
我在 LeetCode 上解决了这个问题 - https://leetcode.com/problems/k-closest-points-to-origin/我可以做两件事 - 1)我们需要按升序对给定点的距离进行排序。
2)我们还必须有与原点距离相关的点。
经过头脑风暴,我想出了使用 c++ stl 中的地图的想法。 因为他们会负责排序以及距离和点的关联。 我的代码如下 -
class Solution
{
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int k)
{
map<double,vector<int>> m;
vector<vector<int>> answer;
for (int i = 0; i < points.size(); i++)
{
double x = sqrt((points[i][0] * points[i][0]) + (points[i][1] * points[i][1]));
m.insert(pair<double, vector<int>>(x,{points[i][0], points[i][1]}));
}
for (int i = 0; i < k; i++)
{
auto it = m.begin();
advance(it,i);
answer.push_back(it->second);
}
return answer;
}
};
对于前 2 个测试用例,它工作正常并引发运行时错误 - 堆栈缓冲区溢出,我最初使用 float 表示 x 但我认为由于限制它会导致错误,所以我将类型更改为 double 但仍然没有运气!
如果有人能帮我找出这里的错误,那将是一个很大的帮助。 先感谢您!
假设有两个点 [-1, 0] 和 [0, 1],k 的值为 2。如果您使用 map,您将仅获得 1 个 <key, value> 对,因为密钥(在本例中为 sqrt(1))对于两个点都是相同的。 因此,您需要使用multimap ,您可以在其中多次使用相同的键。 在这里阅读。
基于您的代码的工作代码示例:
class Solution
{
public:
vector<vector<int>> kClosest(vector<vector<int>>& points, int k)
{
multimap<int,vector<int>> m;
vector<vector<int>> answer;
for (int i = 0; i < points.size(); i++)
{
int x = (points[i][0] * points[i][0]) + (points[i][1] * points[i][1]);
m.insert(pair<int, vector<int>>(x,{points[i][0], points[i][1]}));
}
int i = 0;
for (auto it = m.begin(); it != m.end() && i < k; it++, i++) {
//cout << it->first << " : " << it->second[0] << ", " << it->second[1] << endl;
answer.push_back(it->second);
}
return answer;
}
};
建议:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.