请教在面试中遇到的一个算法。
比如有
const char * szName[]={"张三","李四","王麻子"};
int nRand[]={3,1,2},
要求szName按在nRand中对应的名次输出类似:
1 李四
2 王麻子
3 张三
要求时间复杂度 <O(n^2),纯C实现。 我自己的实现达不到这样一个时间复杂度。求各位指教。
还有麻烦各位推荐有关这方面问题的书籍。谢谢了
[解决办法]
{"张三","李四","王麻子"};
{3,1,2},
===>
index = 0; value = 3; temp = "张三"
[] ["李四"] ["张三"]
index = 2; value = 2; temp = "王麻子"
[] ["王麻子"] ["张三"]
index = 1; value = 1; temp = "李四"
["李四"] ["王麻子"] ["张三"]
[解决办法]
开辟一个大小为N的数组可达到时间复杂度O(n)
#include <iostream>using namespace std;int main(){ const char * szName[]={"张三","李四","王麻子"}; int nRand[]={3,1,2}; int print[3]; int i; for(i=0;i<3;i++) print[nRand[i]-1]=i; for(i=0;i<3;i++) cout<<szName[print[i]]<<endl; return 0;}