我正在尝试解决此问题https://www.hackerrank.com/challenges/ctci-find-the-running-median
我只通过了一个测试用例。我试图通过打印中间值来调试。 最后,我试图打印h2.top()(在代码中提到“问题”),该行给出了分段错误。 h1.top()工作正常。
我不明白为什么只有h2.top()给出了分段错误。 如果可能,任何人都可以指出我的计划中的错误。
int main() {
int n, ele;
int temp;
int c = 0;
cin >> n;
priority_queue<int> h1 = priority_queue<int, vector<int>, less<int> >(); //max_heap
priority_queue<int,vector<int>,greater<int> > h2 = priority_queue<int, vector<int>, greater<int> >(); //min_heap
for(int a_i = 0;a_i < n;a_i++) {
cin >> ele;
if(h1.empty())
h1.push(ele);
else if(ele <= h1.top()) {
if(h1.size() <= h2.size())
h1.push(ele);
else {
temp = h1.top();
h1.pop();
h2.push(temp);
h1.push(ele);
}
}
else{
if(h2.size() < h1.size())
h2.push(ele);
else {
temp = h2.top();
h2.pop();
h1.push(temp);
h2.push(ele);
}
}
c++;
if(c & 1 == 1) {
if(h1.size() > h2.size())
cout<<fixed<<setprecision(1)<<(float)h1.top()<<endl;
else
cout<<fixed<<setprecision(1)<<(float)h2.top()<<endl;
}
else
cout<<fixed<<setprecision(1)<<(h1.top()+h2.top())/2.0<<endl;
cout<<c<<" h1: "<<h1.top()<<" "<<h1.size();
cout<<"\n h2:"<<h2.top()<<" "; //problem
//cout<<h2.top();
cout<<h2.size()<<"\n\n";
}
//cout<<h1.size();
return 0;
}