写代码好难1q1q 2022-03-09 13:55 采纳率: 100%
浏览 96
已结题

C++蜗牛旅游问题,用queue处理这个问题的时候报Segmentation Fault,这是为啥呀,我不理解,求解答

提交的时候出segment fault ,我看了也不是数组开小的问题,

#include <bits/stdc++.h>
#include
#include
#include
typedef long long ll;
using namespace std;
const int N=1e6+10;
int check[N];//检查相同元素的个数
queue a;
int main()
{
int p;
cin>>p;
int mx=0;
int k;
int i;
int l;
int temp=0;
for(i=0; i<p; i++)
{
cin>>k;
if(check[k]==0)
{
a.push(k);
check[k]++;
l=a.size();
mx=max(l,mx);

    }
    else if(check[k]!=0)
    {
        temp=0;
        while(1)
        {
            if(a.front()==k)
            {
                a.pop();
                a.push(k);
                check[k]=1;
                temp=1;
                l=a.size();
                mx=max(l,mx);

                break;
            }else
            {
                a.pop();
            }
            if(temp==1) break;
        }
    }
}
cout<<mx<<endl;
return 0;

  • 写回答

2条回答 默认 最新

  • stone_wangzx 2022-03-09 14:15
    关注
    typedef long long ll;
    using namespace std;
    const int N = 1e6 + 10;
    int check[N];//检查相同元素的个数
    queue<int> a;//stl中是必须加类型的,因为std::queue是模板类
    int main()
    {
        int p;
        cin >> p;
        int mx = 0;
        int k;
        int i;
        int l;
        int temp = 0;
        for (i = 0; i < p; i++)
        {
            cin >> k;
            if (check[k] == 0)
            {
                a.push(k);
                check[k]++;
                l = a.size();
                mx = max(l, mx);
    
            }
            else if (check[k] != 0)
            {
                temp = 0;
                while (a.empty() == false)//修改了这个位置,a是空的时候,front是无效的
                {
                    if (a.front() == k)
                    {
                        a.pop();
                        a.push(k);
                        check[k] = 1;
                        temp = 1;
                        l = a.size();
                        mx = max(l, mx);
    
                        break;
                    }
                    else
                    {
                        a.pop();
                    }
                    if (temp == 1) break;
                }
            }
        }
        cout << mx << endl;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月20日
  • 已采纳回答 3月12日
  • 创建了问题 3月9日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改