67、最大数(数组重排列,组成最大整数)

一、题目

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

二、思路

要想组成最大的整数,一种直观的想法是把数值大的数放在高位。

于是我们可以比较输入数组的每个元素的最高位,最高位相同的时候比较次高位,以此类推,完成排序,然后把它们拼接起来。这种排序方式对于输入数组 没有相同数字开头 的时候是有效的;

三、实现

    function largestNum(nums){
       nums.sort((x,y)=>{
           let sx = 10, sy = 10;
           while(sx<=x){ //记录放到数字x前,需要左移多少
             sx *= 10;
           }
           while(sy<=y){ //记录放到数字y前,需要左移多少
             sy *= 10;
           }

           // y放到x前组成的数字 - x放到y前组成的数字
           return (sx*y+x) - (sy*x+y) 
       })
       if(nums[0]===0){
        return "0";
       }
       return nums.join("");
   }
   let arr = [3,30,34,5,19]
   console.log(largestNum(arr)); //53433019

四、补充:数组的sort方法

  • sort() 方法可以接受一个方法f为参数 。方法f有两个参数,分别代表每次排序比较时的两个数组项;
  • sort()排序时每两个数组项比较都会执行这个参数;
  • 当函数返回值为1的时候就交换两个数组项的顺序,否则就不交换。
let arr = [3,1,4,2,6]

arr.sort((x,y)=>{
    if(x>y){
        return -1;
    }
    if(x<y){
        return 1;
    }

})

1)默认是升序排序

 var  arrA  =  [ 6 , 2 , 4 , 3 , 5 , 1 ];
 arrA.sort();
 document.writeln(arrA);
 // 结果是:1,2,3,4,5,6 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值