7 条题解

  • -2
    @ 2024-9-18 21:58:44

    标题

    思路

    解题方法

    复杂度

    时间复杂度:

    添加时间复杂度, 示例: O(n)O(n)

    空间复杂度:

    添加空间复杂度, 示例: O(n)O(n)

    Code

    #include<bits/stdc++.h> #define maxn 100005 using namespace std;

    int n, ans; //ans计算操作数 int a[maxn]; queue q;

    int main() { ios::sync_with_stdio(0),cin.tie(0),cout.tie(0); cin>>n; bool ok=1; for(int i=1;i<=n;i++) { cin>>a[i]; if(i!=1&&a[i]!=a[i-1])ok=0; } if(ok) {//如果每一项都相等,就操作不了,输出0,对应第2个子任务 cout<<0;return 0; } if(n<=2) {//一个小特判,对应第一个子任务 if(n==1) cout<<0; //只有一项无法操作,输出0 else cout<<1; //此时两项必然不相等,可以操作一次 return 0; } bool flag=0; //存储队首是否参与操作 for(int i=1;i<=n;i++) { if(q.empty())q.push(a[i]);//如果队列为空就加入 else if(a[i]==q.front()&&!flag)q.push(a[i]); //如果和队首相等就删不了,要加入,但是如果队首之前参与过操作,这一项也得删除 else { ans++; //要删,操作数加1 while(q.size()>1){ //一次性操作到只剩一个 flag=1;
    q.pop(); ans++; } } } cout<<ans; //输出,一次过 return 0; }

    信息

    ID
    21
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    递交数
    1510
    已通过
    392
    上传者