【Leetcode】179. Largest Number
Given a list of non negative integers, arrange them such that they form the largest number.
For example, given [3, 30, 34, 5, 9], the largest formed number is 9534330.
Note: The result may be very large, so you need to return a string instead of an integer.
分析:给定一个正整数数组,将数组的数字整合成一个最大的数字。
样例:① [3, 30, 34, 5, 9]->9534330
②[121,12]->12121
③[0,0] -> 0
(1)将数组的数字组合,这隐含着一个大数问题,所以不可以直接用int或者long来保存结果,需要用到字符串(也可以用数组).
(2)字符串m与字符串n拼接,可以成为mn或者nm。要比较mn与nm的大小,不能直接用Arrays.sort()函数,这个函数排序后的结果为升序,重写Comparator 实现降序,才能组成最大的数字。
(3)字符串m与n的大小比较规则:当mn>nm时,m>n;
当mn=nm时,m=n;
当mn<nm时,m<n;
(4)字符串的比较规则:str1="abcda";str2="abcdb";当比较到第五个字符str1为a,str2为b 。a的ASCII码小于b的ASCII码。所以str1<str2
下面的代码 直接使用 Arrays.sort(com, new Comparator<Object>() { .....});在sort函数中重写 Comparator<Object>(),效率略低。跑完leetcode上的样例需要334ms。
public String largestNumber(int[] nums) {
if (nums == null)
return null;
int len = nums.length;
String[] com = new String[len];
int all0 = ;
for (int i = ; i < len; i++) {
if (nums[i] == ) {
all0++;
System.out.println("~~~" + all0);
}
com[i] = Integer.toString(nums[i]);
}
Arrays.sort(com, new Comparator<Object>() {
public int compare(Object obj1, Object obj2) {
String str1 = (String) obj1;
String str2 = (String) obj2;
String com1 = str1 + str2;
System.out.println("com1:" + com1);
String com2 = str2 + str1;
System.out.println("com2:" + com2);
if (com1.compareTo(com2) >= ) {
System.out.println("com1<com2");
return -;
} else {
System.out.println("com1>com2");
return ;
}
}
});
String ans = "";
for (int i = ; i < len; i++) {
ans += com[i];
}
if (all0 == len)
ans = "";
return ans;
}
做出以下改进 拍完样例的时间为120ms
Comparator<String> comp = new Comparator<String>() {
@Override
public int compare(String str1, String str2) {
String s1 = str1 + str2;
String s2 = str2 + str1;
return s2.compareTo(s1);
// reverse order here, so we can do append() later
}
};
Arrays.sort(com, comp);
【Leetcode】179. Largest Number的更多相关文章
- 【刷题-LeetCode】179 Largest Number
Largest Number Given a list of non negative integers, arrange them such that they form the largest n ...
- 【LeetCode】747. Largest Number At Least Twice of Others 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 寻找两次最大值 排序 大顶堆 日期 题目地址:htt ...
- 【LeetCode】813. Largest Sum of Averages 解题报告(Python)
[LeetCode]813. Largest Sum of Averages 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博 ...
- 【LeetCode】375. Guess Number Higher or Lower II 解题报告(Python)
[LeetCode]375. Guess Number Higher or Lower II 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://f ...
- 【LeetCode】764. Largest Plus Sign 解题报告(Python)
[LeetCode]764. Largest Plus Sign 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn ...
- 【LeetCode】137. Single Number II 解题报告(Python)
[LeetCode]137. Single Number II 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/single- ...
- 【LeetCode】306. Additive Number 解题报告(Python)
[LeetCode]306. Additive Number 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http: ...
- 【LeetCode】452. Minimum Number of Arrows to Burst Balloons 解题报告(Python)
[LeetCode]452. Minimum Number of Arrows to Burst Balloons 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https ...
- 【LeetCode】65. Valid Number
Difficulty: Hard More:[目录]LeetCode Java实现 Description Validate if a given string can be interpreted ...
随机推荐
- 总结2018&&展望2019
2019很激动,因为我加入了博客园这个大家庭,以后的技术文章都会在博客园记录,也希望可以结识更多的有趣朋友和共同理想的友人.第一篇文章从自我规划开始.2019 您好!!! 总结2018: 距离2018 ...
- (数据科学学习手札52)pandas中的ExcelWriter和ExcelFile
一.简介 pandas中的ExcelFile()和ExcelWriter(),是pandas中对excel表格文件进行读写相关操作非常方便快捷的类,尤其是在对含有多个sheet的excel文件进行操控 ...
- 用sudo 运行命令的时候,环境变量用的是super用户的环境变量
比如今天在~/.bashrc设置了JAVA_HOME, 而sudo运行命令的时候却显示没有设置可用的JAVA_HOME
- easyui-dialog打开多次数据串台问题
问题: 公司项目最近在用easyui写后台管理系统,发现dialog使用后总会报出莫名奇妙的问题 1.打开多次后数据显示上一次的,表单提交错误或者获取数据错误 2.来回跳转后,会有打开其它dialog ...
- 洛谷P2464 [SDOJ2008]郁闷的小J
洛谷P2464 [SDOJ2008]郁闷的小J 题目描述 小J是国家图书馆的一位图书管理员,他的工作是管理一个巨大的书架.虽然他很能吃苦耐劳,但是由于这个书架十分巨大,所以他的工作效率总是很低,以致他 ...
- L014-第三关课前linux命令及基础知识考试手把手实战解答小节
又是一周啊,以后保持一周一个微博吧. 这是一个堂解答考试题的课,那么就以题目来展开吧! 1.如何取得/etiantian文件的权限对应的数字内容,如-rw-r--r--为644,要求用命令获得644这 ...
- 添加jQuery方法解析url查询部分
Web前端不同页面间传值可以使用 cookies.localStorage 和 sessionStorage 等本地存储. 但是,今天我们尝试使用 url 查询,假设我们要传递字符串 str 到 mo ...
- 1.0 Hadoop的介绍、搭建、环境
HADOOP背景介绍 1.1 Hadoop产生背景 HADOOP最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加,遇到了 ...
- 【python 3.6】使用itertools.product进行排列组合
#python 3.6 #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'BH8ANK' import itertools colo ...
- ZOJ 3962
就是统计1~n中出现的各个数字的次数,当然是在16进制下. 不过有个区间问题的小技巧,统计从 [x,y] 可以转换成 从 [1,y] 减去 [1,x-1]. 不过要分类讨论一下,因为有可能会出现溢出, ...