【发布时间】:2020-08-25 16:47:51
【问题描述】:
在下面的程序中,我试图在长度为 n 的数组中找到窗口大小的最大值 k。供参考,问题来自LeetCode。
例如,如果数组是 [2 5 3 1 2] 并且窗口大小是 3,那么我有窗口为 [2 5 3]、[5 3 1]、[3 1 2] 并且对应的最大值是 5 , 5, 3.
我为此目的使用std::deque,但它给出了运行时错误,我认为没有发生任何指针失效,我找不到任何。请帮帮我,我在这个问题上卡了很长时间。
这是我的代码:
class Solution {
public:
vector<int> maxSlidingWindow(vector<int>& nums, int k) {
deque<int> d;
for (int i = 0; i < k; ++i) {
while (!d.empty() && d.front() < nums[i]) {
d.pop_front();
}
d.push_front(nums[i]);
}
vector<int> ans;
ans.push_back(d.back());
int n = nums.size();
for (int i = k; i < n; ++i) {
while (1) {
int elem = d.back();
d.pop_back();
if (elem == nums[i-k]) {
break;
}
}
while (!d.empty() && d.front() < nums[i]) {
d.pop_front();
}
d.push_front(nums[i]);
ans.push_back(d.back());
}
return ans;
}
};
显示的错误信息是这样的:
Line 157: Char 16: runtime error: reference binding to misaligned address 0xbebebebebebec0ba for type 'int', which requires 4 byte alignment (stl_deque.h)
0xbebebebebebec0ba: note: pointer points here
<memory cannot be printed>
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/8/../../../../include/c++/8/bits/stl_deque.h:162:16
【问题讨论】:
-
请通过提供minimal reproducible example 证明错误不在您显示的代码之外。
-
@Yunnosch 实际上该网站没有提供其内部代码,仅显示用户可以编辑的类。但是过了一段时间我发现点击操场,我可以访问内部功能。所以这里是有问题的完整代码:pastebin.com/p0Fk3z2V 在此,向量在标准输入的括号中提供,如 [2,5,3,1,2],k 在下一行提供。跨度>
标签: c++ data-structures runtime-error deque