Interview Practice 06 - Appearance Count of Numbers

Question

腾讯面试题:
给你10分钟时间,根据上排给出十个数,在其下排填出对应的十个数
要求下排每个数都是先前上排那十个数在下排出现的次数。
上排的十个数如下:
【0,1,2,3,4,5,6,7,8,9】

Solution

初看此题,貌似很难,10分钟过去了,可能有的人,题目都还没看懂。

举一个例子,
数值: 0,1,2,3,4,5,6,7,8,9
分配: 6,2,1,0,0,0,1,0,0,0
0在下排出现了6次,1在下排出现了2次,
2在下排出现了1次,3在下排出现了0次….
以此类推..

Sample Code

[expand title=”Sample Code in C++” tag=”h4″]

//数值: 0,1,2,3,4,5,6,7,8,9 //分配: 6,2,1,0,0,0,1,0,0,0 #include using namespace std; #define len 10 class NumberTB { private: int top[len]; int bottom[len]; bool success; public: NumberTB(); int* getBottom(); void setNextBottom(); int getFrequecy(int num); }; NumberTB::NumberTB() { success = false; //format top for(int i=0;i<len;i++) { top[i] = i; } } int* NumberTB::getBottom() { int i = 0; while(!success) { i++; setNextBottom(); } return bottom; } //set next bottom void NumberTB::setNextBottom() { bool reB = true; for(int i=0;i<len;i++) { int frequecy = getFrequecy(i); if(bottom[i] != frequecy) { bottom[i] = frequecy; reB = false; } } success = reB; } //get frequency in bottom int NumberTB::getFrequecy(int num) //此处的num即指上排的数 i { int count = 0; for(int i=0;i<len;i++) { if(bottom[i] == num) count++; } return count; //cout即对应 frequecy } int main() { NumberTB nTB; int* result= nTB.getBottom(); for(int i=0;i<len;i++) { cout<<*result++<<endl; } return 0; } /////////////////////////////////////////// // 运行结果: // 6 // 2 // 1 // 0 // 0 // 0 // 1 // 0 // 0 // 0 // Press any key to continue /////////////////////////////////////////

[/expand]

Show Comments