首页 > 编程语言 > 详细

(算法)构造最大数

时间:2015-09-30 12:39:04      阅读:117      评论:0      收藏:0      [点我收藏+]

题目:

给定一个只包含正整数的数组,给出一个方法,将数组中的数拼接起来,使得拼接后的数最大。例如,[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;
}

 

(算法)构造最大数

原文:http://www.cnblogs.com/AndyJee/p/4848646.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!