首页 > 试题广场 >

最大数

[编程题]最大数
  • 热度指数:37360 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为n的数组nums,数组由一些非负整数组成,现需要将他们进行排列并拼接,每个数不可拆分,使得最后的结果最大,返回值需要是string类型,否则可能会溢出。

数据范围:
进阶:时间复杂度 ,空间复杂度:
示例1

输入

[30,1]

输出

"301"
示例2

输入

[2,20,23,4,8]

输出

"8423220"
示例3

输入

[2]

输出

"2"
示例4

输入

[10]

输出

"10"

备注:
输出结果可能非常大,所以你需要返回一个字符串而不是整数。
function solve( nums ) {
    nums.sort((a, b)=> {
        let last = +(a+''+b);
        let cur = +(b+''+a);
        return cur - last;
    });
    if (nums.every(num => num===0)) return '0';
    return nums.join('');
}
发表于 2022-07-10 15:49:01 回复(0)

简洁代码:

function solve( nums ) {
    const res = nums.sort((a, b) => a + '' + b > b + '' + a ? -1 : 1).join('');
    return  res == 0 ? 0 : res;
}
发表于 2021-12-20 12:39:10 回复(0)
function solve( nums ) {
    // write code here
  return  nums.sort(function(a,b){
        return (""+b+a)-(""+a+b)
    }).join("").replace(/^0+$/g,"0")
}
// solve([3,30,34,5,9])
module.exports = {
    solve : solve
};
发表于 2021-08-20 15:33:22 回复(0)
写给还在前端苦苦挣扎算法的孩子们,用的回溯算法,应该是最差的方法,想到新方法再补充。
 let  res=[]
    let path=[]
    nums.sort((a,b)=>a-b)
    const  back=used=>{    //回溯算法求全排列
       if(path.length==nums.length){
           res.push(path.join(""))
           return
           
       }
        for(let i=0;i<nums.length;i++){
            if(i>0 && nums[i-1]==nums[i]&&!used[i-1]) continue
            if(!used[i]){
                used[i]=true
                path.push(nums[i])
                back(used)
                path.pop()
                used[i]=false
            }
        }
    }
    back([])
    if(res.length==0)return 0  //排除【0,0】这个组合
    return  Math.max(...res)  //取排列里面的所有值的最大值


发表于 2021-08-02 20:15:10 回复(0)
js方法,思路是看了大家的回答,应该有很多优化的地方,希望大佬指出
function solve( nums ) {
    // write code here
    nums.sort((a,b)=>{
        let x=''+a+b
        let y=''+b+a
        return y-x
    })
    let key=''
    for(let i=0;i<nums.length;i++){
        key+=nums[i]
    }
    if(key[0]==0){
        return '0'
    }else{
        return key
    }
    
}
module.exports = {
    solve : solve
};
发表于 2021-07-14 15:01:43 回复(0)
function solve( nums ) {
    // write code here
    return nums.map(String).sort((a,b)=> (b+a) - (a+b)).join('').replace(/^0+/,'') || '0'
}

发表于 2021-01-04 17:22:44 回复(0)
function solve( nums ) {
    if(!nums.length) return '';
    if(nums.every(item => item === 0)) return nums[0].toString();
    nums.sort((a, b) => {
        let temp1 = a + '' + b;
        let temp2 = b + '' + a;
        if(parseInt(temp1, 10) < parseInt(temp2, 10)) {
            return 1;
        } else {
            return -1;
        }
        return 1;
    })
    return nums.join('');
}

编辑于 2020-12-11 19:13:41 回复(0)