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

来源:稀土掘金

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

目录
相关文章
|
前端开发 数据库
用织梦实现一个从零到可以正常访问的网站--终结篇
用织梦实现一个从零到可以正常访问的网站--终结篇
131 0
|
测试技术
软件测试高频面试题“黑盒测试之正交试验法”案例剖析与实践应用
软件测试高频面试题“黑盒测试之正交试验法”案例剖析与实践应用
708 0
|
前端开发 JavaScript API
【独家揭秘】Bottle框架为何能俘获开发者的心?三大实战案例带你领略Web开发新境界!
【8月更文挑战第31天】Bottle是一款轻量级Python Web框架,以简单高效著称,秉持极简设计,适合快速开发小型项目或构建API服务。本文通过具体代码示例展示Bottle框架的独特魅力,从安装到创建应用、路由设置、模板渲染及表单处理等方面进行详细介绍,帮助读者轻松上手并掌握Bottle的应用技巧。
367 1
|
设计模式 uml
在电脑主机(MainFrame)中只需要按下主机的开机按钮(on()),即可调用其它硬件设备和软件的启动方法,如内存(Memory)的自检(check())、CPU的运行(run())、硬盘(Hard
该博客文章通过一个电脑主机启动的示例代码,展示了外观模式(Facade Pattern)的设计模式,其中主机(MainFrame)类通过调用内部硬件组件(如内存、CPU、硬盘)和操作系统的启动方法来实现开机流程,同时讨论了外观模式的优缺点。
|
JavaScript 前端开发 Java
浏览器中的event-loop
浏览器中的event-loop
|
传感器 开发者
【STM32基础 CubeMX】外部中断
【STM32基础 CubeMX】外部中断
455 44
|
人工智能 前端开发 JavaScript
Linux常用命令大全(三)
Linux常用命令大全
143 1
|
存储 JSON JavaScript
JavaScript深拷贝与浅拷贝
JavaScript深拷贝与浅拷贝
87 0
|
存储 算法 关系型数据库
带你读《存储漫谈Ceph原理与实践》第一章分布式存储概述1.2各主流分布式方案对比(二)
带你读《存储漫谈Ceph原理与实践》第一章分布式存储概述1.2各主流分布式方案对比
 带你读《存储漫谈Ceph原理与实践》第一章分布式存储概述1.2各主流分布式方案对比(二)
|
消息中间件 Java 中间件
如何在 Spring 生态中玩转 RocketMQ?
RocketMQ 作为业务消息的首选,在消息和流处理领域被广泛应用。而微服务生态 Spring 框架也是业务开发中最受欢迎的框架,两者的完美契合使得 RocketMQ 成为 Spring Messaging 实现中最受欢迎的消息实现。本文展示了 5 种在 Spring 生态中文玩转 RocketMQ 的方式,并描述了每个项目的特点和使用场景。
506 10
如何在 Spring 生态中玩转 RocketMQ?