184-最大数

给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数。

注意事项

最后的结果可能很大,所以我们返回一个字符串来代替这个整数。

样例

给出 [1, 20, 23, 4, 8],返回组合最大的整数应为8423201。

挑战

在 O(nlogn) 的时间复杂度内完成。

标签

排序

思路

主体操作就是对 num 排序,要求在 O(nlogn) 的时间复杂度内完成,所以使用快排,即 sort() 函数,这里需要自定义比较函数 cmp

在比较 2 个 int 型数据时,将其转换成 string 更加方便,比较思路为:

  • 若 a 与 b 中,a[i] > b[i],则 a > b (如 2345 < 245)

  • 若 a 与 b 中,a.size() < b.size() 且 a[i] = b[i],则只需比较 b[a.size()] 与 b[0]

    - 若 b[a.size()] > b[0],则 a < b (如 2221 < 222)
    - 否则,则 a > b (如 2224 > 222)

code

class Solution {
public:
/**
*@param num: A list of non negative integers
*@return: A string
*/ string largestNumber(vector<int> &num) {
// write your code here
int size = num.size();
if (size <= 0) {
return string("");
} sort(num.begin(), num.end(), cmp);
string result;
if (num[0] == 0) {
result = "0";
return result;
}
for (int i = 0; i < num.size(); i++) {
char temp[50];
sprintf(temp, "%d", num[i]);
result += temp;
}
return result;
} static bool cmp(int a, int b) {
char temp[50];
sprintf(temp, "%d", a);
string stra = temp;
sprintf(temp, "%d", b);
string strb = temp; for (int i = 0; i < stra.size() && i < strb.size(); i++) {
if (stra[i] > strb[i]) {
return true;
}
else if (stra[i] < strb[i]) {
return false;
}
}
if (stra.size() < strb.size()) {
return strb[stra.size()] > strb[0] ? false : true;
}
if (stra.size() > strb.size()) {
return stra[strb.size()] > stra[0] ? true : false;
}
return false;
}
};

lintcode-184-最大数的更多相关文章

  1. [LintCode] Create Maximum Number 创建最大数

    Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum numb ...

  2. [LintCode]——目录

    Yet Another Source Code for LintCode Current Status : 232AC / 289ALL in Language C++, Up to date (20 ...

  3. lintcode 滑动窗口的最大值(双端队列)

    题目链接:http://www.lintcode.com/zh-cn/problem/sliding-window-maximum/# 滑动窗口的最大值 给出一个可能包含重复的整数数组,和一个大小为  ...

  4. lintcode算法周竞赛

    ------------------------------------------------------------第七周:Follow up question 1,寻找峰值 寻找峰值 描述 笔记 ...

  5. LintCode笔记 - 145.大小写转换 - 极简之道 - 最短代码

    这道题目一眼就能看出是送分题,当然在这里也不谈高难度的实现逻辑,肯定有同学会想直接用自带函数实现不就可以了吗? 对的,就是这么简单,然而今天的重点是如何把代码简写到最短. 本文章将带你把代码长度从 一 ...

  6. BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]

    1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MBSubmit: 8748  Solved: 3835[Submi ...

  7. (lintcode全部题目解答之)九章算法之算法班题目全解(附容易犯的错误)

    --------------------------------------------------------------- 本文使用方法:所有题目,只需要把标题输入lintcode就能找到.主要是 ...

  8. Lintcode 85. 在二叉查找树中插入节点

    -------------------------------------------- AC代码: /** * Definition of TreeNode: * public class Tree ...

  9. Lintcode 166. 主元素

    ----------------------------------- Moore's voting algorithm算法:从一个集合中找出出现次数半数以上的元素,每次从集合中去掉一对不同的数,当剩 ...

  10. Lintcode 166. 链表倒数第n个节点

    ----------------------------------- 最开始的想法是先计算出链表的长度length,然后再从头走 length-n 步即是需要的位置了. AC代码: /** * De ...

随机推荐

  1. collections.Counter类统计列表元素出现次数

    # 使用collections.Counter类统计列表元素出现次数 from collections import Counter names = ["Stanley", &qu ...

  2. day31 进程和其他方法,锁,队列

    1.进程的其他方法: 首先引入模块: import os from multiprocessing import Process p = Process(target=f,) 进程的id:  p.pi ...

  3. Hadoop2学习路程-HDFS

    什么是Hadoop HDFS? Hadoop 分布式文件系统是世界上最可靠的文件系统.HDFS可以再大量硬件组成的集群中存储大文件. 它的设计原则是趋向于存储少量的大文件,而不是存储大量的小文件. 即 ...

  4. 树莓派3B+学习笔记:2、更改显示分辨率

    1.打开终端,输入 sudo raspi-config 选择第7行: 2.选择第5行: 3.选择一个自己习惯的分辨率(我选择1024X768),确定后重启,VNC会自动连接: 4.更改分辨率完成,方便 ...

  5. U盘kali系统安装

      正言: 起初先百度了一下U盘安装Kali的资料,有很多版本和方法,当然还是以百度经验为例开始操作https://jingyan.baidu.com/article/cdddd41ca1027e53 ...

  6. 第2天 Java基础语法

    第2天 Java基础语法 今日内容介绍 变量 运算符 变量 变量概述 前面我们已经学习了常量,接下来我们要学习变量.在Java中变量的应用比常量的应用要多很多.所以变量也是尤为重要的知识点! 什么是变 ...

  7. MFC实现http连接、发送和接收数据

    #include <afxinet.h> // 设置超时 CInternetSession session; session.SetOption(INTERNET_OPTION_CONNE ...

  8. C#中如何使用JS脚本

    C#中如何使用JS脚本 目前在做的组态软件中就使用到了js脚本,这部分js脚本是供用户编写的,用户可以通过我们提供的脚本以及js自身的逻辑,用户就可以随心所欲的控制设备的运行.有比较了几款在C#中执行 ...

  9. 2018南京网络赛L题:Magical Girl Haze(最短路分层图)

    题目链接:https://nanti.jisuanke.com/t/31001 解题心得: 一个BZOJ的原题,之前就写过博客了. 原题地址:https://www.lydsy.com/JudgeOn ...

  10. Java设计模式(18)——行为模式之迭代子模式(Iterator)

    一.概述 概念 UML简图 // Aggregate:聚集(集合) 角色 抽象迭代子:定义遍历元素所需要的接口 具体迭代子:实现抽象迭代子接口,保持游标 聚集/具体聚集:定义/实现创建迭代子对象的接口 ...