某一天,在微软亚洲研究院有N个面试要进行,它们的时间分别为(B[i], E[i])(B[i]为面试开始时间,E[i]为面试结束时间)。假设一个面试者一天只参加一个面试。为了给面试者提供一个安静便于发挥的环境,我们希望将这N个面试安排在若干个面试点。不同的面试在同一个时间不能被安排在同一个面试点。如果你是微软亚洲研究院的HR,现在给定这N个面试的时间之后,你能计算出至少需要多少个面试点吗?
编程之美给的解答如下:
int nMaxColors=0,i,k,j;
for(i=0;i<n;i++)
{
for(k=0;k<nMaxColors;k++)
isForbidden[k]=false;
for(j=0;j<i;j++)
if(isoverlap(b[j],e[j],b[i],e[i]))
isForbidden[color[j]]=true;
for(k=0;k<nmaxcolor;k++)
if(!isforbidden[k])
break; //这里的意思是如果这个面试和前面每一个面试都冲突的话,跳出循环,从而使k=nMaxcolors,这样颜色数加一
if(k<nMaxcolors)
color[i]=k;
else
color[i]=nmaxcolor++;
}
cout<<nmaxcolor<<endl;
第二种解法需要注意的地方是:
if(nColorUsing>Maxcolor)
MaxColor =nColorUsing; //这里的意思是得到整个遍历过程中最大达nColorUsing值便是需要的颜色值