剑指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;}