Faz*_*ani 4 c++ runtime-error deque
我正在解决滑动窗口最大值问题,但我在 Leetcode 上收到以下错误,但它在我的本地编译器上运行 [VSCode]
第 1034 行:Char 34:运行时错误:将无符号偏移量添加到 0x603000000040 溢出到 0x603000000034 (stl_vector.h)
摘要:UndefinedBehaviorSanitizer:未定义行为/usr/bin/../lib/gcc/x86_64-linux-gnu/9/ ../../../../include/c++/9/bits/stl_vector.h:1043:34
这是代码:
#include <deque>
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& A, int k) {
int _max = INT_MIN;
vector<int> ans;
for (int i = 0; i < k; ++i)
{
_max = max(_max, A[i]);
}
if (k == A.size()){
return {_max};
}
ans.push_back(_max);
deque<int> dq;
dq.push_back(_max);
for (int i = k; i < A.size(); ++i)
{
if (dq.empty())
{
dq.push_back(i);
_max = A[i];
}
else
{
while (!dq.empty() && A[dq.front()] < A[i])
{
dq.pop_front();
}
if (dq.empty())
{
_max = A[i];
}
else
{
_max = max(_max, A[i]);
}
dq.push_front(A[i]);
ans.push_back(_max);
}
}
return ans;
}
};
Run Code Online (Sandbox Code Playgroud)
看起来问题就在这里:A[dq.front()] < A[i];
正如我在运行时看到的那样,dq.front()其值-3不太好,因为它是负索引。真正的崩溃就在这里A[dq.front()]。所以你的代码中有一个编程错误。
看起来您也在这里推送了错误的索引:dq.push_front(A[i]),这意味着输入确实有负值,这是您没有预料到的。
也许您想写dq.push_front(i)而不是dq.push_front(A[i]).
固定程序对您来说如下所示:
#include <deque>
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& A, int k) {
int _max = INT_MIN;
vector<int> ans;
for (int i = 0; i < k; ++i)
{
_max = max(_max, A[i]);
}
if (k == A.size()){
return {_max};
}
ans.push_back(_max);
deque<int> dq;
dq.push_back(_max);
for (int i = k; i < A.size(); ++i)
{
if (dq.empty())
{
dq.push_back(i);
_max = A[i];
}
else
{
while (!dq.empty() && A[dq.front()] < A[i])
{
dq.pop_front();
}
if (dq.empty())
{
_max = A[i];
}
else
{
_max = max(_max, A[i]);
}
dq.push_front(i);
ans.push_back(_max);
}
}
return ans;
}
};
Run Code Online (Sandbox Code Playgroud)