Sliding window 最大问题中的分段错误
Segmentation fault in Sliding window maximum problem
我尝试在 Hackerrank(Deque-stl). I followed the algorithm given on this link 上解决 Sliding window maximum using deque 问题。我不想复制解决方案,所以我尝试编写自己的解决方案。但是我的代码给了我 "segmentation fault",我不明白我的代码有什么问题。谁能解释一下我的代码中的错误?
void printKMax(int arr[], int n, int k)
{
deque<int> q;
int l=0,j=k-1;
q.push_back(l);
while(j!=n)
{
for(;l<j;)
{
while((arr[l+1]>arr[q.back()])&&(!q.empty()))
q.pop_back();
q.push_back(++l);
}
cout<<arr[q.front()]<<" ";
j++;
while(q.front()<=j-k)
q.pop_front();
}
cout<<"\n";
}
我不确定算法是否正确,但有 2 行可能会出现分段错误:
while((arr[l+1]>arr[q.back()])&&(!q.empty()))
原因是您在 q.empty()
之前检查 q.back()
如果它为空,结果将是未定义的行为。将其更改为:
while((!q.empty())&&(arr[l+1]>arr[q.back()]))
这样它将首先检查它是否为空,如果它为空则在检查 q.back()
并给出分段错误之前中断循环。
第二行是:
while(q.front()<=j-k)
q.pop_front();
我想你应该检查它是否像第一行一样是空的。
我尝试在 Hackerrank(Deque-stl). I followed the algorithm given on this link 上解决 Sliding window maximum using deque 问题。我不想复制解决方案,所以我尝试编写自己的解决方案。但是我的代码给了我 "segmentation fault",我不明白我的代码有什么问题。谁能解释一下我的代码中的错误?
void printKMax(int arr[], int n, int k)
{
deque<int> q;
int l=0,j=k-1;
q.push_back(l);
while(j!=n)
{
for(;l<j;)
{
while((arr[l+1]>arr[q.back()])&&(!q.empty()))
q.pop_back();
q.push_back(++l);
}
cout<<arr[q.front()]<<" ";
j++;
while(q.front()<=j-k)
q.pop_front();
}
cout<<"\n";
}
我不确定算法是否正确,但有 2 行可能会出现分段错误:
while((arr[l+1]>arr[q.back()])&&(!q.empty()))
原因是您在 q.empty()
之前检查 q.back()
如果它为空,结果将是未定义的行为。将其更改为:
while((!q.empty())&&(arr[l+1]>arr[q.back()]))
这样它将首先检查它是否为空,如果它为空则在检查 q.back()
并给出分段错误之前中断循环。
第二行是:
while(q.front()<=j-k)
q.pop_front();
我想你应该检查它是否像第一行一样是空的。