【发布时间】:2011-06-25 06:32:45
【问题描述】:
给定一个元素数组,找出最大可能的数
通过使用数组的元素形成。
例如:10 9
答:910
2 3 5 78
答案:78532
100 9
答:9100
我知道这个问题有一个使用自定义字符串比较器的解决方案,但我不明白它是如何工作的。
#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;
bool compare ( string a, string b )
{
return atoi( (a+b).c_str() ) < atoi((b+a).c_str() );
}
int main()
{
vector<string> vs;
string s;
while ( cin >> s ) {
vs.push_back(s);
}
sort( vs.begin(), vs.end(), compare );
for ( int i = vs.size()-1; i >= 0; i-- ) {
cout << vs[i];
}
}
谁能提出一个算法来解决这个问题? 将理解上述比较器的解释。 谢谢
【问题讨论】:
-
糟糕的解决方案:nlog(n) 复杂度(排序)加上慢
compare()函数 -
@Gene Bushuyev:有更好的复杂性解决方案吗?
-
我之前问过这个问题,请查看我的个人资料。有一个很好的答案。
-
它不是重复的......当我发布问题时,您无法在搜索中找到它