離家不遠

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Given a list of non negative integers, arrange them such that they form the largest number.

Example 1:

Input: [10,2]
Output: "210"

Example 2:

Input: [3,30,34,5,9]
Output: "9534330"

大意是:给出一个由非负整数组成的数组,对数组中的非负整数进行排序组合并得到其所能表示的最大的数。

显而易见的解法就是把所有可能的组合进行比较得出最大数,但是这种解法时间复杂度是O(n^n),不考虑这么解

其实如果我们遵循一个原则就是把大的数放最前面,小的数放后面就能得到最大的那个数,但是什么数是大的数呢,如果是位数相同比如 9,8或者10,20很简单就是两个数谁值比较大谁就放前面,但是如果是9,13或者8,891呢,比较起来就稍微复杂一点了。其实最简单的方法是直接比较AB和BA的值谁比较大,如果AB比较大则把A放B前面就可以了。

/**
 * @param {number[]} nums
 * @return {string}
 */
var largestNumber = function(nums) {
    nums.sort(function(a,b){
        return  parseInt(b+""+a) - parseInt(a+""+b);
    })
    var rt = nums.join("");    
    return rt.charAt(0)=="0"?"0":rt;
};

说明

JavaScript中提供了数组的排序方法

arrayObject.sort(sortby)

请注意,数组在原数组上进行排序,不生成副本。

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

 数组从小到大(升序)排列则 return a-b;

 数组从大到小(降序)排列则 return b-a;

posted on 2020-09-28 15:24  離家不遠  阅读(200)  评论(0)    收藏  举报