(算法)构造最大数
题目:
给定一个只包含正整数的数组,给出一个方法,将数组中的数拼接起来,使得拼接后的数最大。例如,[1, 32, 212]拼接之后,所得到的最大数为322121。
思路:
比较方法:两个数先后顺序的确定,如a,b,如果ab>ba(转换为字符串,通过字典序排序),则a在b的前面;
通过上面的比较方法,就可以对数组中的整数进行从大到小的排序,最终输出的数组组成的就是最大数。
代码:
#include <iostream> #include <sstream> #include <vector> #include <algorithm> using namespace std; struct cmp{ bool operator()(const string &a,const string &b){ string s1=a+b; string s2=b+a; return s1>s2; } }; bool comp(const string &a,const string &b){ string s1=a+b; string s2=b+a; return s1>s2; } void getMaxNum(const vector<int> &A,int n){ vector<string> str(n); for(int i=0;i<n;i++){ stringstream ss; ss<<A[i]; ss>>str[i]; } sort(str.begin(),str.end(),cmp()); //sort(str.begin(),str.end(),comp); for(int i=0;i<n;i++) cout<<str[i]; cout<<endl; } int main() { int n; while(cin>>n){ vector<int> A(n); for(int i=0;i<n;i++) cin>>A[i]; getMaxNum(A,n); } return 0; }