您的位置:首页 > 其它

一串首尾相连的珠子(m个),有N种颜色(N《=10),设计一个算法,取出其中一段,要求包含所有N中颜色,并使长度最短。并分析时间复杂度与空间复杂度

2012-10-21 13:01 1466 查看
#include <iostream>
#define COLOR 3
#define LENGTH 10
using namespace std;
//假定m=10,n=3
int GetLength(int* zhuzi);//返回一段包含所有颜色的长度
bool IsAllColor(int* color);//判断是否含有所有颜色
int main()
{
int zhuzi[LENGTH+1] = {1,2,1,2,3,1,1,2,2,3,0};//存放相应的颜色1~n,最后一位存放0,标记结束
cout<<GetLength(zhuzi)<<endl;
return 0;
}
int GetLength(int* zhuzi)
{
int result = 0;
int *p = zhuzi;
int color[COLOR] = {0};//表示1~n每一种颜色的数目

while(*p!=0&&!IsAllColor(color))
{
color[(*p++)-1]++;
result++;
}
p = zhuzi + 1;
if(IsAllColor(color))
return result<GetLength(p)?result:GetLength(p);
else
return LENGTH;//表示没有找到一个包含所有颜色的段,就返回全长

}
bool IsAllColor(int* color)
{
for(int i=0;i<COLOR;i++)
{
if(color[i]==0)
return false;
}
return true;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐