LintCode-最大数

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

样例

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

注意

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

分析:这个其实是一个排序问题,当然首字母越大肯定应该排在前面,注意【20,201】【20,203】两种情况,第一种201应该在20后面,第二种203应该在20前面。

代码:

bool cmp(string s1,string s2)
    {
        int i=0;
        while(i<min(s1.length(),s2.length()))
        {
            if(s1[i]>s2[i])
                return true;
            else if(s1[i]<s2[i])
                return false;
            i++;
        }
        if(i==s1.length())
            return s2[i]>s2[0]?false:true;
        if(i==s2.length())
            return s1[i]>s1[0]?true:false;
    }

class Solution {
public:
    /**
     *@param num: A list of non negative integers
     *@return: A string
     */

    string toString(int x)
    {
        if(x==0)
            return "0";
        string ret = "";
        while(x>0)
        {
            char c  = x%10+'0';
            ret = c+ret;
            x/=10;
        }
        return ret;
    }
    string largestNumber(vector<int> &num) {
        // write your code here
        int sum  = accumulate(num.begin(),num.end(),0);
        if(sum==0)
            return "0";
        vector<string> nums;
        for(int i=0;i<num.size();i++)
        {
            nums.push_back(toString(num[i]));
        }
        sort(nums.begin(),nums.end(),cmp);
        string ret = "";
        for(int i=0;i<nums.size();i++)
            ret+=nums[i];
        return ret;
    }
};
时间: 2024-12-18 05:47:03

LintCode-最大数的相关文章

[LintCode] Create Maximum Number 创建最大数

Given two arrays of length m and n with digits 0-9 representing two numbers. Create the maximum number of length k <= m + n from digits of the two. The relative order of the digits from the same array must be preserved. Return an array of the k digit

BZOJ 1012: [JSOI2008]最大数maxnumber(线段树)

012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec  Memory Limit: 162 MB Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插入操作.语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列

Bzoj1012 最大数maxnumber

Time Limit: 3000MS   Memory Limit: 165888KB   64bit IO Format: %lld & %llu Description 现在请求你维护一个数列,要求提供以下两种操作:1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度.2. 插入操作.语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得

[lintcode the-smallest-difference]最小差(python)

题目链接:http://www.lintcode.com/zh-cn/problem/the-smallest-difference/ 给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组 A 中取 A[i],数组 B 中取 B[j],A[i] 和 B[j]两者的差越小越好(|A[i] - B[j]|).返回最小差. 排好序后用两个指针分别扫描两个数组,每次更新他们的差值的绝对值.并且依据他们两个数字的大小来决定谁来移动指针. 1 class Solution: 2 # @param

lintcode.44 最小子数组

最小子数组 描述 笔记 数据 评测 给定一个整数数组,找到一个具有最小和的子数组.返回其最小和. 注意事项 子数组最少包含一个数字 您在真实的面试中是否遇到过这个题? Yes 哪家公司问你的这个题? Airbnb Amazon LinkedIn Cryptic Studios Dropbox Apple Epic Systems TinyCo Yelp Hedvig Zenefits Uber Snapchat Yahoo Microsoft Bloomberg Facebook Google

最大数——栈

洛谷        P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作. 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾. 限制:n是整数(可能为负数)并且在长整范围内. 注意:初始时数列是空的

1860 最大数

1860 最大数 1998年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 查看运行结果 题目描述 Description 设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数. 输入描述 Input Description 第一行一个正整数n. 第二行n个正整数,空格隔开. 输出描述 Output Description 连接成的多位数. 样例输入 Sample Input Sample 1: 3 13 312

洛谷 P1198 [JSOI2008]最大数

P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. 限制:L不超过当前数列的长度. 2. 插入操作. 语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾. 限制:n是整数(可能为负数)并且在长整范围内. 注意:初始时数列是空的,没有一个数. 输入

lintcode 66.67.68 二叉树遍历(前序、中序、后序)

AC代码: /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The r

[LintCode/LeetCode]——两数和、三数和、四数和

LintCode有大部分题目来自LeetCode,但LeetCode比较卡,下面以LintCode为平台,简单介绍我AC的几个题目,并由此引出一些算法基础. 1)两数之和(two-sum) 题目编号:56,链接:http://www.lintcode.com/zh-cn/problem/two-sum/ 题目描述: 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target. 你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标.注意这里下标的范围是 1