Largest Number 179
题目描述:
给出一组非负整数,将这组整数拼接成一个数字,要求数字最大,用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相关推荐
- [LeetCode]179. Largest Number
[LeetCode]179. Largest Number 题目描述 解题思路 求最大的数,在数组中对于每一位数字数值越大应当越靠前,如:9 > 5,所以9应该在5之前 需要考虑的是对于不同位数 ...
- [LeetCode]179.Largest Number
[题目] Given a list of non negative integers, arrange them such that they form the largest number. For ...
- Leetcode 179 Largest Number
Leetcode 179 Largest Number 题目 思路 代码 优化 题目 Given a list of non negative integers, arrange them such ...
- 179 Largest Number
题目链接:https://leetcode.com/problems/largest-number/ 题目: Given a list of non negative integers, arrang ...
- LeetCode(179) Largest Number
题目如下: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...
- [leetcode]179 Largest Number
问题描述: Given a list of non negative integers, arrange them such that they form the largest number. Fo ...
- LeetCode:Largest Number - 求整型数组中各元素可拼合成的最大数字
2019独角兽企业重金招聘Python工程师标准>>> 1.题目名称 Largest Number(求整型数组中各元素可拼合成的最大数字) 2.题目地址 https://leetco ...
- largest number java_将给定的数组组成最大的数 Largest Number
问题: Given a list of non negative integers, arrange them such that they form the largest number. For ...
- [每日编程]求 largest Number - 给出一组非负整数,求这些非负整数可以拼接出的最大数字...
英文:Given a list of non negative integers, arrange them such that they form the largest number. 中文:给出 ...
最新文章
- Kazoo安装和使用
- 《数学之美》第29章 各个击破算法和Google云计算的基础
- CentOS安装和配置Mysql
- 「后端小伙伴来学前端了」Vue中利用全局事件总线改造 TodoList 案例
- 神经网络基础:七种网络单元,四种层连接方式
- C++PrimerPlus学习——第十一章编程练习
- IT部门每天忙到飞起,年终总结价值却不能被量化?附年终报告模板
- Linux系统编程30:进程信号之产生信号的四种方式(Core Dump,kill,raise)
- 写插件代码查看单据简单示例分享
- 最近京东抢茅台的很火啊,但是必须要京东plus会员。天猫超市抢茅台插件来咯
- 金蝶k/3 现金流量表编制口诀
- Android加速度传感器测位移,一种校核加速度传感器测位移的方法与流程
- Go语言核心之美 2.4-布尔值
- 计算机c盘能分区吗,电脑C盘还可以分盘吗?
- 关于Microsoft Edge 浏览器无法使用selenium调用问题
- AcWing 204. 表达整数的奇怪方式
- 多域海马体分割的对抗性持续学习
- 为什么磁盘分区的时候,第一个分区前面总有一段空间(63或者2048个扇区)
- 解决xshell6和xftp6强制升级问题
- linux防火墙允许snmp端口号,Linux下用iptables完成snmp的端口映射
热门文章
- [6] ADB 文件管理
- 5s突然一直信号无服务器,手机突然没信号了怎么回事?
- Qt工作笔记-QSplitter的使用(老版本里面发现的神控件在新版本内使用)
- QML文档阅读笔记-easing.type解析与实例
- Qt工作笔记-QHash与QMap查找速度粗略比较实战
- 数据结构-图的进阶代码
- 6.1树的定义和存储
- influxdb数据过期_为什么腾讯QQ的大数据平台选择了InfluxDB数据库?
- linux 网络块存储,网络存储集群
- python对非it上班族有用吗_非专业人士学Python有用吗?