对撞指针
查看原帖
对撞指针
1463377
mmmkkk111楼主2024/12/4 23:29
#include<bits/stdc++.h>
using namespace std;
int n;int a[200005];
void solve(){
    int l=1;
    int r=n;
    int count=0;
    while(l<r){
    int b=0;int e=0;
    if(a[l-1]==a[l])b++;
    if(a[r+1]==a[r])b++;
    if(a[l-1]==a[r])e++;
    if(a[r+1]==a[l])e++;    
    if(b>e)swap(a[r],a[l]);
    r--;l++;
    }
    for(int i=1;i<=n;i++){
        if(a[i]==a[i-1])count++;
    }
    cout<<count<<'\n';
}
int main(){
    int t;
    cin>>t;
    while(t--){
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i];
    a[0]=0;a[n+1]=0;
    solve();
    }
    return 0;
}
每次只要比较交换前后相同的数目,只要考虑每次的单侧确保没有后效性
2024/12/4 23:29
加载中...