```
// 思路:以某个元素为分界线,将该元素前的2改为1,该元素及其后的1改为2
//方法1超时
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
int i,j=1;
int cnt[n];
for(i=0;i<n;i++)
cnt[i]=0;
for(i=0;i<n;i++)
scanf("%d",&a[i]);
for(j=0;j<n;j++)
{
for(i=0;i<j;i++)
{
if(a[i]==2) cnt[j]++;
}
for(i=j;i<n;i++)
{
if(a[i]==1) cnt[j]++;
}
}
int min=cnt[0];
for(i=0;i<j;i++)
{
if(cnt[i]<min) min=cnt[i];
}
printf("%d",min);
return 0;
}
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a[n];
int i;
int countblack[n],countwhite[n];
for(i=0;i<n;i++)
{
countblack[i]=0;
countwhite[i]=0;
scanf("%d",&a[i]);
}
int nb=0,na=0;
for(int i=0;i<n;i++)
{
countblack[i]=nb;
if(a[i]==2) nb++;
}
for(int i=n-1;i>=0;i--)
{
countwhite[i]=na;
if(a[i]==1) na++;
}
int min=countblack[0]+countwhite[0];
for(int i=0;i<n;i++)
{
if(countblack[i]+countwhite[i]<min)
min=countblack[i]+countwhite[i];
}
printf("%d",min);
return 0;
}
`