赞
踩
添加链接描述
明白性质就好
#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int a[N],nxt[N],lst[N]; int main(){ int n; scanf("%d",&n); int color=0,cnta=0,cntb=0; for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } nxt[0]=n+1; for(int i=1;i<=n;i++)lst[a[i]]=n+1; for(int i=n;i>=1;i--){ nxt[i]=lst[a[i]];//第一次出现是n+1 lst[a[i]]=i;//第二次出现为当前下标 } int a0=0,a1=0; int ans=0; for(int i=1;i<=n;i++){ if(a[a0]!=a[i]&&a[a1]!=a[i]){ if(nxt[a0]>nxt[a1])a0=i;//如果下一个重复的数下标大于 尽可能的不重复 保持更多的多样性 else a1=i; ans++; } else if(a[i]==a[a0])a0=i; else if(a[i]==a[a1])a1=i; }// printf("%d\n",ans);// return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。