179. 最大数|刷题打卡

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

一、题目描述:


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


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


示例:

示例 1:

输入:nums = [10,2]

输出:"210"


示例 2:

输入:nums = [3,30,34,5,9]

输出:"9534330"


示例 3:

输入:nums = [1]

输出:"1"


提示:

1 <= nums.length <= 100

0 <= nums[i] <= 10^9


二、思路分析:


拿到题目,首先想到的时数组需要转成字符串数组、两者比较需要用到排序。 选择从大到小排序,数据的排序可以直接作为返回结果。


主要的核心是怎么比较。通过例子就可以看出,第一位最大的在前,依次类推。确定第一位大的后,在第一位相等的情况下,依次确定第二位大的、第三位大的。


例:nums = 128, 12, 320, 321, 32]

正常的想法应该是这样的: 第一位最大的是3,先将3开头的排序到最前面,1开头的放到3后面。 3开头,第二位大的是2无需调动。第三位较大的是1,所以将321放到最前面。 当遇到特殊情况时,就需要特殊处理。

网络异常,图片无法展示
|

但是我们可以直接借助sort排序,自定义一个sort规则。直接按照a+b < b+a的降序规则即可。


直接比较左右两个数按照不同的顺序拼接值的大小进行排序。

比如[10,2]: 210 > 102, 即数组排序为[2,10]。


例:nums = 128, 12, 320, 321, 32]

网络异常,图片无法展示
|


三、AC 代码:


function largestNumber(nums) {
  nums.sort((a, b) => b + '' + a - (a + '' + b))
  if (nums[0] == 0) return '0'
  console.log(nums);
  return nums.join('')
}
// 法二 sort核心
function largestNumber(nums) {
  for (let i = 0; i < nums.length - 1; i++) {
    nums[i] = nums[i].toString()
    for (let j = i + 1; j < nums.length; j++) {
      nums[j] = nums[j].toString()
      if (nums[i] + nums[j] < nums[j] + nums[i]) {
        let temp = nums[i]
        nums[i] = nums[j]
        nums[j] = temp
      }
    }
  }
  return nums.join('')
};


四、总结:


此题考查的是排序。需要对几种常用的排序熟练掌握,并运用到不同的场合当中。


作者:ClyingDeng

链接:https://juejin.cn/post/6950266406206341156

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

目录
相关文章
|
11月前
|
算法
【算法专题突破】双指针 - 快乐数(3)
【算法专题突破】双指针 - 快乐数(3)
38 0
|
11月前
|
存储
【剑指offer】-和为S的两个数-38/67
【剑指offer】-和为S的两个数-38/67
|
索引 Cloud Native
【刷题日记】152. 乘积最大子数组
【刷题日记】152. 乘积最大子数组
每日一题——“水仙花数”
哈喽大家好,我是保护小周ღ,本期为大家带来的是求“水仙花数”,此水仙花,非彼水仙花,一起来看看把~
刷 leetcode三个数的最大乘积 | 刷题打卡
刷 leetcode三个数的最大乘积 | 刷题打卡
81 0
|
机器学习/深度学习
【牛客刷题】每日一练——自守数
【牛客刷题】每日一练——自守数
160 0
LeetCode刷题(14)【简单】加一(C++)
LeetCode刷题(14)【简单】加一(C++)
LeetCode刷题(14)【简单】加一(C++)
|
JavaScript 前端开发
[LeetCode 179. 最大数] | 刷题打卡[4]
给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。
132 0
[LeetCode 179. 最大数] | 刷题打卡[4]