请问一个经典的面试题
上周连续去两个公司面都遇到了同一个问题,结果都没回答出,真是郁闷。问题是这样的。现在有好多球,但是球的颜色就10种,让你写段代码来统计每种球的个数。要求时间复杂度最低(好象是n)。
期待高手指导,谢谢
[解决办法]
这个,不简单么?
color List[]={red,black,white,...};
pair<color,int> A[10]={
pair<color,int>(red,0),
pair<color,int>(white,0),
...
};
for( i=0; i<sizeof(List)/sizeof(List[0]); ++i ){
for( j=0; List[i]!=A[j].first; ++j )
;
++A[j].second;
}
[解决办法]
O(10n)=O(n)
[解决办法]
3楼说的hash映射是什么意思哦,本来菜鸟一个哈
[解决办法]
把10种颜色就定为 A[10] 先全赋为0 再一个个选 选到一种颜色 就 A[I]++就行了
最后在输出 就是O(N)
[解决办法]
就是嘛,LS的有道理
[解决办法]
int n; //小球总数
int nHist[10];//存每种颜色小球的数目
for (int i = 0;i < n; i++)
{
nHist[nColor[i]]++;
}