剑指offer面试题33把数组排成最小的数,就是确定sort规则就可以了

来源:互联网 发布:数据总表按字段拆分 编辑:程序博客网 时间:2024/05/21 11:37
/*下午亮点阿里云二面,一夜办梦办醒满脑子都是海量数据。。今天早早来图书馆 csdn居然挂掉 上不去了。。。还是再搞一道题目吧这个题就是给一个数组 用数组里面的所有数字拼起来 能得到的最小的数字是什么比如 3 32 321 得到是321323这题就想排序 就行了 排序规则 一个数字在另一个数字前面。把两个数字连起来 。。哪个方前面时小 就是哪个在前面。最后 书上还给了一段证明。就是说 这样能得到最小的 大概就是离散数学里那些理论最后代码用了很多STL的东西*/#include<iostream>#include<cstdio>#include<vector>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;//书上代码C写的很麻烦,我直接C++写了 这样很直观啦bool CMP(string a,string b){    string tmp1=a.append(b);    string tmp2=b.append(a);    return tmp1<tmp2;}void PrintMinNum(int * num,int n){    vector<string> vec;    char str[20];    for(int i=0;i<n;++i)    {        sprintf(str,"%d",num[i]);//把数字编程字符串        vec.push_back(str);//string 的vector向量可以直接push char str[];    }    sort(vec.begin(),vec.end(),CMP);    for(int i=0;i<n;++i)    cout<<vec[i];    cout<<endl;}int main(){    int arr[]={3,32,321};    int len=3;    PrintMinNum(arr,len);    return 0;}

原创粉丝点击