题目描述:

给出一组非负整数,将这组整数拼接成一个数字,要求数字最大,用string返回这个最大的数字

For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330


题目分析:

对于数字 a,b到底哪个在前面组成的数字大一点呢,只要比较 ab 和 ba 这两个字符串就可以了 ,如果ab>ba应该将a放到前面,反之将a放到后面

这样可以对多有整数按照上面的比较方法,按照从大到小排序;排序之后只要一个一个的拼接起来就可以了

问题:

在使用sort时碰到了点问题:

当数组中的所有元素都相同时:

  如果cmp函数定义成这种格式 if(a>=b)return true; 排序之后会出现奇怪的数字,或者一直跑不出来

  但是如果cmp函数定义成这种格式 if(a>b)return true; 排序就不会出现问题了

对于上面的问题只有在数据量 >=17 时才出现(应该在数据量小于17时采用的是插入排序)

之前没注意排序过后一直会出问题,用自己的排序模板类通过了

后来发现去掉“=”就没问题

原因至今不清楚。。。


代码:

 1 template<class T>class Qsort{
 2 private :
 3     void copy(T &a,T &b){
 4         if(&a==&b)return ;
 5         char *pa=(char *)&a;
 6         char *pb=(char *)&b;
 7         for(int i=0;i<sizeof(T);i++)*(pa+i)=*(pb+i);
 8     }
 9
10     void Swap(T & a,T & b){
11         T buf;
12         copy(buf,a);
13         copy(a,b);
14         copy(b,buf);
15     }
16 public :
17     void qsort(T d[],int l,int r,bool (*cmp)(const T& a,const T& b)){
18         if(l>=r)return ;
19
20         Swap(d[l],d[(l+r)>>1]);
21         int last=l;
22
23         for(int i=l+1;i<=r;i++)
24             if(!cmp(d[l],d[i]))
25                 Swap(d[++last],d[i]);
26         Swap(d[l],d[last]);
27
28         qsort(d,l,last-1,cmp);
29         qsort(d,last+1,r,cmp);
30     }
31 };
32 class Solution {
33 public:
34     static string itos(int n){
35         string ret="";
36         if(n==0)return "0";
37         while(n){
38             ret=(char)(n%10+'0')+ret;
39             n=n/10;
40         }
41         return ret;
42     }
43
44     static bool cmp(const int &a,const int &b){
45         string s1=itos(a);
46         string s2=itos(b);
47         int i;
48         string merge1=s1+s2;
49         string merge2=s2+s1;
50         if(merge1.compare(merge2)>=0)return true;
51         return false;
52     }
53
54     string largestNumber(vector<int> &num) {
55         int a[num.size()];
56         for(int i=0;i<num.size();i++)a[i]=num[i];
57         Qsort<int> st;
58         st.qsort(a,0,num.size()-1,cmp);
59         if(a[0]==0)return "0";
60         string ret="";
61         for(int i=0;i<num.size();i++)
62             ret=ret+itos(a[i]);
63         return ret;
64     }
65 };

 1 static inline string itos(int n){
 2     string ret="";
 3     if(n==0)return "0";
 4     while(n){
 5         ret=(char)(n%10+'0')+ret;
 6         n=n/10;
 7     }
 8     return ret;
 9 }
10
11 static inline int cmp(const string &a,const string &b){
12     if((a+b).compare(b+a)>0)return 1;
13     return 0;
14 }
15
16 string largestNumber(vector<int> &num) {
17     string st[num.size()];
18     for(int i=0;i<num.size();i++)st[i]=itos(num[i]);
19
20     sort(st,st+num.size(),cmp);
21
22     if(st[0][0]=='0')return "0";
23
24     string ret="";
25     for(int i=0;i<num.size();i++)
26         ret=ret+st[i];
27     return ret;
28 }

转载于:https://www.cnblogs.com/li-xingtao/p/4223925.html

Largest Number 179相关推荐

  1. [LeetCode]179. Largest Number

    [LeetCode]179. Largest Number 题目描述 解题思路 求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数 ...

  2. [LeetCode]179.Largest Number

    [题目] Given a list of non negative integers, arrange them such that they form the largest number. For ...

  3. Leetcode 179 Largest Number

    Leetcode 179 Largest Number 题目 思路 代码 优化 题目 Given a list of non negative integers, arrange them such ...

  4. 179 Largest Number

    题目链接:https://leetcode.com/problems/largest-number/ 题目: Given a list of non negative integers, arrang ...

  5. LeetCode(179) Largest Number

    题目如下: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...

  6. [leetcode]179 Largest Number

    问题描述: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...

  7. LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字

    2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2.题目地址 https://leetco ...

  8. largest number java_将给定的数组组成最大的数 Largest Number

    问题: Given a list of non negative integers, arrange them such that they form the largest number. For ...

  9. [每日编程]求 largest Number - 给出一组非负整数,求这些非负整数可以拼接出的最大数字...

    英文:Given a list of non negative integers, arrange them such that they form the largest number. 中文:给出 ...

最新文章

  1. Kazoo安装和使用
  2. 《数学之美》第29章 各个击破算法和Google云计算的基础
  3. CentOS安装和配置Mysql
  4. 「后端小伙伴来学前端了」Vue中利用全局事件总线改造 TodoList 案例
  5. 神经网络基础:七种网络单元,四种层连接方式
  6. C++PrimerPlus学习——第十一章编程练习
  7. IT部门每天忙到飞起,年终总结价值却不能被量化?附年终报告模板
  8. Linux系统编程30:进程信号之产生信号的四种方式(Core Dump,kill,raise)
  9. 写插件代码查看单据简单示例分享
  10. 最近京东抢茅台的很火啊,但是必须要京东plus会员。天猫超市抢茅台插件来咯
  11. 金蝶k/3 现金流量表编制口诀
  12. Android加速度传感器测位移,一种校核加速度传感器测位移的方法与流程
  13. Go语言核心之美 2.4-布尔值
  14. 计算机c盘能分区吗,电脑C盘还可以分盘吗?
  15. 关于Microsoft Edge 浏览器无法使用selenium调用问题
  16. AcWing 204. 表达整数的奇怪方式
  17. 多域海马体分割的对抗性持续学习
  18. 为什么磁盘分区的时候,第一个分区前面总有一段空间(63或者2048个扇区)
  19. 解决xshell6和xftp6强制升级问题
  20. linux防火墙允许snmp端口号,Linux下用iptables完成snmp的端口映射

热门文章

  1. [6] ADB 文件管理
  2. 5s突然一直信号无服务器,手机突然没信号了怎么回事?
  3. Qt工作笔记-QSplitter的使用(老版本里面发现的神控件在新版本内使用)
  4. QML文档阅读笔记-easing.type解析与实例
  5. Qt工作笔记-QHash与QMap查找速度粗略比较实战
  6. 数据结构-图的进阶代码
  7. 6.1树的定义和存储
  8. influxdb数据过期_为什么腾讯QQ的大数据平台选择了InfluxDB数据库?
  9. linux 网络块存储,网络存储集群
  10. python对非it上班族有用吗_非专业人士学Python有用吗?