20.
设有一个仅有红、白、蓝三种颜色的条块组成的条块序列,用一个时间复杂度为O(n)的算法,使得
这些条块按红、白、蓝的顺序排列,即排成荷兰国旗图案。
请各位给一个算法,谢谢!
#include "stdio.h"
main()
{
int a[11]={1,1,1,1,2,2,2,2,3,3,3};
int b[11];
int i=0,x=0,y=0,z=0,min,n=1;
for(i=0;i<12;i++)
{ if(a[i]==1)
x++;
if(a[i]==2)
y++;
if(a[i]==3)
z++;
}
if(x<=y&&x<=z)
{min=x; y=y-x; z=z-x; x=0; }
if(y<=x&&y<=z)
{min=y; x-=y;z-=y; y=0 ;}
if(z<=x&&z<=y)
{min=z; y-=z;x-=z ; z=0 ;}
printf("%d %d %d %d/n",min,x,y,z);
for(i=0;i<11;i++)
{if(i<min*3)
{if(n==4)
n=1;
b[i]=n;
n++;
}
else
{
if(y-->0)
{ b[i]=2; continue; }
if(z-->0)
{ b[i]=3; continue; }
if(x-->0)
{ b[i]=1; continue; }
}
}
for(i=0;i<11;i++)
printf("%d ",b[i]);
getch();
}
ps.2个月没做题了哈 总结下问题
1.for循环写成for(i=0;i++;i<11)
2.大括号范围不敏感
3.continue不会拼了