user-0 提问: 阿里巴巴暑假算法面试题

回复:
user: user-1
content: 引用 楼主 bellinctbu 的回复:有N个数组 依此按行排列 类似矩阵但是每个数组元素却不等 要求 输出所有数组的所有元素 而且 第一个数组输出1次 其他的数组输出M次 而且M等于该数组前一个数组的元素个数 请用尽量简单的算法实现 并分析其时间复杂度  这种题目太模糊了，N=100和N=2^100，处理上肯定会有区别的，当你的数据大的需要几十块硬盘才放的下的时候，和只需要100MB的的内存空间就能放下，就算是同样的规律的数据，处理起来也绝对不一样。 没有特定的有逻辑范围的给定数据，我个人认为谈不上算法，算法不是空想，而是服务与数据的算法才有价值。 个人建议遇到这些类型不要去局限表面，要多发散思维。

user: user-2
content: 每个数组的元素不等，那怎么确定第一个数组有多少个元素？这个数组下标保存在哪里?如果已经知道每个数组的下标，将它们相加不好好了吗

user: user-3
content: 引用 8 楼 truexf 的回复:[quote=引用 7 楼 bellinctbu 的回复:] 题目说错了，应该是  其他的数组输出M次 而且M等于该数组前面所有数组的元素个数之和 那就把while(true)前面的那句iCount=0;注释掉[/quote] 不对的，纠正一下： void printArray(char *arrs[],size_t iRowCount) {         int iRepeat;     int iCount = 0;     for(size_t i=0; i<iRowCount; ++i )     {         if(0==i)                     iRepeat = 1;         else             iRepeat += iCount;         for(int j=0;j<iRepeat;++j)         {                     iCount = 0;             while(true)             {                 if('\0' == arrs[i][iCount])                 {                     printf("\r\n");                     break;                 }                 else                 {                     printf("%c",arrs[i][iCount]);                     ++iCount;                 }             }         }     } }

user: user-3
content: 引用 7 楼 bellinctbu 的回复:题目说错了，应该是  其他的数组输出M次 而且M等于该数组前面所有数组的元素个数之和 那就把while(true)前面的那句iCount=0;注释掉

user: user-0
content: 引用 3 楼 truexf 的回复: void printArray(char *arrs[],size_t iRowCount) {         int iRepeat;     int iCount = 0;     for(size_t i=0; i<iRowCount; ++i )     {         if(0==i)                     iRepeat = 1;         else             iRepeat = iCount;         for(int j=0;j<iRepeat;++j)         {                     iCount = 0;             while(true)             {                 if('\0' == arrs[i][iCount])                 {                     printf("\r\n");                     break;                 }                 else                 {                     printf("%c",arrs[i][iCount]);                     ++iCount;                 }             }         }     } }  int _tmain(int argc, _TCHAR* argv[]) {      char* arrs[] ={"i love you china","hello world","oh yeah, come on baby!"};     printArray(arrs,3);     system("pause");     return 0; }   题目说错了，应该是  其他的数组输出M次 而且M等于该数组前面所有数组的元素个数之和

user: user-0
content: 题目说错了，应该是  其他的数组输出M次 而且M等于该数组前面所有数组的元素个数之和

user: user-0
content: 引用 4 楼 FightForProgrammer 的回复:初步想了一下，一般的算法需要像遍历二维数组那样，结果复杂度是 n^2  现在的想法是把这个数组保存在一个结构体里面  struct { int index;//保存元素输出次数 int *arr;//保存元素 };  通过memcpy把每个数组元素移到结构体中，然后把每个结构体输出就是了。这样时间复杂度n  这样也有个问题 如何按照他指定的次数输出每一个数组

user: user-4
content: 初步想了一下，一般的算法需要像遍历二维数组那样，结果复杂度是 n^2  现在的想法是把这个数组保存在一个结构体里面  struct { int index;//保存元素输出次数 int *arr;//保存元素 };  通过memcpy把每个数组元素移到结构体中，然后把每个结构体输出就是了。这样时间复杂度n

user: user-3
content: void printArray(char *arrs[],size_t iRowCount) {         int iRepeat;     int iCount = 0;     for(size_t i=0; i<iRowCount; ++i )     {         if(0==i)                     iRepeat = 1;         else             iRepeat = iCount;         for(int j=0;j<iRepeat;++j)         {                     iCount = 0;             while(true)             {                 if('\0' == arrs[i][iCount])                 {                     printf("\r\n");                     break;                 }                 else                 {                     printf("%c",arrs[i][iCount]);                     ++iCount;                 }             }         }     } }  int _tmain(int argc, _TCHAR* argv[]) {      char* arrs[] ={"i love you china","hello world","oh yeah, come on baby!"};     printArray(arrs,3);     system("pause");     return 0; }

user: user-5
content: 新手路过，坐等简单算法。

user: user-0
content: 关键在于尽量简单的算法复杂度。。。

user: user-6
content: 仅供参考 #include <stdio.h> #include <string.h>  void printArray(char *arrs[],int num) {         int len=1;     int i;     for(;num>0 ;)     { 	    num--; 	    for(i=0;i<len;i++) 	    { 		    puts(*arrs); 	    } 	    if(num>0)arrs++; 	    len=len+strlen(*arrs)+1;     } }   int main(int argc, char* argv[]) {      char* arrs[] ={"i love you china","hello world","oh yeah, come on baby!"};     printArray(arrs,3);     return 0; }

user: user-7
content: 总感觉很多朋友贴上来的这些公司算法题说的模模糊糊的……是我水平太臭了还是楼主都按照自己的记忆翻译了一边……原题目应该不会是这样说明的吧……