LeetCode179最大数(相关话题:自定义排序器)

题目描述

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

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

示例 1:

输入nums = [10,2]
输出:"210"

示例 2:

输入nums = [3,30,34,5,9]
输出:"9534330"
提示:
  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 109

背景知识

一、比较器规则

Java

Arrays.sort() 方法用于对数组进行排序。当你使用Lambda表达式作为比较器(Comparator)时,你可以定义自己的排序规则。

Java对于表达式 Arrays.sort(asStrs, (a, b) -> ...)asStrs 是一个字符串数组,而 (a, b) -> ... 是一个Lambda表达式,用于比较两个字符串 ab

Lambda表达式应该返回一个整数,规则如下:

  • 如果 a 应该排在 b 之前,则返回负数。
  • 如果 a 和 b 相等,则返回0。
  • 如果 a 应该排在 b 之后,则返回正数。

Python

Python的  sorted 函数也支持传入lambda的比较器,规则和Java是一样的下面是代码示例

#想要根据两个条件来排序,你可以返回一个元组,Python 会首先根据元组的第一个元素来排序,
#然后在第一个元素相同时,根据第二个元素来排序
as_strs = ['abc', 'ab', 'abcd', 'a']
sorted_strs = sorted(as_strs, key=lambda a: (len(a), a))
print(sorted_strs)  # 输出:['a', 'ab', 'abc', 'abcd']


  二、比较器构造大小顶堆

PriorityQueue<Integer> l = new PriorityQueue<>((a,b)->b-a);

返回值大于0则b-a >0 即b>a,a排在b后面是降序,所以是小顶堆。  

PriorityQueue<Integer> r = new PriorityQueue<>((a,b)->a-b);

返回值大于0则a-b >0 即a>b,a排在b后面是升序,所以是大顶堆。   

代码实现 

思考:(a, b) -> (b + a).compareTo(a + b)还是(a, b) -> (a + b).compareTo(b + a)?

用具体的数字套进去验证,可知应该用(a, b) -> (b + a).compareTo(a + b)

class Solution {public String largestNumber(int[] nums) {String[] asStrs = new String[nums.length];for (int i = 0; i < nums.length; i++) {asStrs[i] = String.valueOf(nums[i]);}Arrays.sort(asStrs, (a, b) -> (b + a).compareTo(a + b));if (asStrs[0].equals("0")) {return "0"; // 处理全0的情况}String largestNumberStr = String.join("", asStrs);return largestNumberStr;}}

相关问题

LeetCode295之数据流的中位数(相关话题:优先队列)-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/240582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

postgresql|数据库|LVM快照热备冷恢复数据库的思考

一&#xff0c; LVM快照备份的意义 数据库备份一直是数据库运维工作中的重点&#xff0c;一个完备的备份不仅仅是仅有后悔药的功能&#xff0c;还可能有迁移数据库的作用。 那么&#xff0c;数据库备份系统我们需要的&#xff0c;也就是看重的是四个点&#xff0c;甚至更多的…

【LeetCode刷题笔记】前缀树

208. 实现 Trie (前缀树) 解题思路: 1. 前缀树 Map实现 ,使用一个 Map<Character, Trie> 来存储 每个字符 对应的 若干子节点 ,在构造函数中初始化 根节点 root 为 当前对象实例 , 在 插入

centos 安装git

在 CentOS 上安装 Git 的过程相对简单。Git 是一个版本控制系统&#xff0c;广泛用于软件开发和其他版本控制任务。以下是在 CentOS 上安装 Git 的步骤&#xff1a; 1. 打开终端 首先&#xff0c;打开您的 CentOS 系统上的终端。 2. 安装 Git 使用以下命令安装 Git&#xf…

java的XWPFDocument3.17版本学习

maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version> </dependency> 测试类&#xff1a; import org.apache.poi.openxml4j.exceptions.InvalidFormatExcep…

Python+Playwright自动化测试--playwright处理浏览器多窗口切换

1.简介 浏览器多窗口的切换问题相比大家不会陌生吧&#xff0c;之前小编在javaselenium系列文章中就有介绍过。大致步骤就是&#xff1a;使用selenium进行浏览器的多个窗口切换测试&#xff0c;如果我们打开了多个网页&#xff0c;进行网页切换时&#xff0c;我们需要先获取各…

R软件包ConsensusCluster进行共识聚类(Consensus Clustering)

从下面论文看到这个方法&#xff1a; Wang, Xin, et al. "Deep learning using bulk RNA-seq data expands cell landscape identification in tumor microenvironment." Oncoimmunology 11.1 (2022): 2043662. 这篇论文基于 AI 方法对 bulk RNA-seq 数据识别肿瘤微环…

DAY14

问题一&#xff1a;面向对象与面向过程的区别于联系 1.区别 面向过程的最小单位是函数&#xff0c;强调功能行为&#xff0c;考虑的是怎么做 面向对象的最小单位是类&#xff0c;把功能封装到了对象里面&#xff0c;强调的是有功能的对象&#xff0c;考虑的是谁来做&#xf…

【平面几何】三角形的内心与内切圆(性质归纳)(下)

【平面几何】三角形的内心与内切圆&#xff08;性质归纳&#xff09;&#xff08;上&#xff09; 性质21. △ A B C \triangle ABC △ABC 的内切圆 I I I 分别切 B C BC BC, A C AC AC, A B AB AB 于 D D D, E E E, F F F. 设 B C BC BC 所对中位线是 K L KL KL, 则…

10、基于LunarLander登陆器的Dueling DDQN强化学习(含PYTHON工程)

10、基于LunarLander登陆器的Dueling DDQN强化学习&#xff08;含PYTHON工程&#xff09; LunarLander复现&#xff1a; 07、基于LunarLander登陆器的DQN强化学习案例&#xff08;含PYTHON工程&#xff09; 08、基于LunarLander登陆器的DDQN强化学习&#xff08;含PYTHON工程…

【Com通信】什么是Signal Group及为什么要用Signal Group

目录 前言 正文 1.Signal Group概念介绍 1.1 Initialization 1.2 Transmission 1.3 Reception 1.4 Notifications

【动态规划算法(dp算法)】之背包问题

文章目录 背包问题动规五部曲一、0-1背包问题 &#xff1a;限制物品不可重复 (要么不选 要么选一个)二、完全背包问题&#xff1a;不限制重复&#xff08;要么不选 要么可以多选&#xff09;&#xff08;完全背包可以转化为0-1背包问题&#xff09; 动态规划&#xff1a;01背包…

使用OpenCV4实现工业缺陷检测的六种方法

目录 1 机器视觉2 缺陷检测3 工业上常见缺陷检测方法 1 机器视觉 机器视觉是使用各种工业相机&#xff0c;结合传感器跟电气信号实现替代传统人工&#xff0c;完成对象识别、计数、测量、缺陷检测、引导定位与抓取等任务。其中工业品的缺陷检测极大的依赖人工完成&#xff0c;…

【平面几何】三角形的内心与内切圆(性质归纳)(上)

【平面几何】三角形的内心与内切圆&#xff08;性质归纳&#xff09; 注记: 三角形内切圆半径记为 r r r, 外接圆半径记为 R R R, 顶点 A A A 点所对的旁切圆半径记为 r A r_A rA​, 以此类推. 性质1-1. △ A B C \triangle ABC △ABC 的内切圆 I I I 分别切 B C BC B…

撤回聊天室消息, 再次加入聊天室, 仍然显示已经被撤销的消息

用户的聊天如果开启了拉取特定消息功能, 需要在后台做一下修改: 把聊天室 “加入聊天室获取指定消息类型” 加上 RC:RcCmd 消息类型, 这样就可以隐藏元消息 详情查看&#xff1a;融云-为用户提供IM即时通讯和实时音视频通信云服务

企业数据治理:(1)概述

目录 确定数据治理的规范与标准 设立与数据治理规范和标准相匹配的组织架构 明确数据治理的范围 制定切实可行的治理目标与实施计划 数据治理是企业IT系统建设当中的重要组成部分&#xff0c;是一种综合性的方法和实践&#xff0c;目的在确保数据的完整性、准确性和一致性。…

Redis Stream消息队列之基本语法与使用方式

前言 本文的主角是Redis Stream&#xff0c;它是Redis5.0版本新增加的数据结构&#xff0c;主要用于消息队列&#xff0c;提供了消息的持久化和主备复制功能&#xff0c;可以让任何客户端访问任何时刻的数据&#xff0c;并且能记住每一个客户端的访问位置&#xff0c;还能保证…

部署tomcat单机多实例,keepalived+mysql的互为主从高可用,mysql+keepalived高可用

部署tomcat单机多实例 在Tomcat中部署单机多实例是一种常见的做法&#xff0c;它允许您在同一台服务器上运行多个独立的Tomcat实例&#xff0c;每个实例都有自己的配置、日志和应用程序。 安装jdk环境 首先配置java环境 [roottomcat ~]# tar xf jdk-8u211-linux-x64.tar.gz…

代码随想录算法训练营第二十五天 | 回溯算法part2

目录 力扣题目 力扣题目记录 216.组合总和III 17.电话号码的字母组合 数字和字母如何映射 总结 力扣题目 用时&#xff1a;1h 1、216.组合总和III 2、17.电话号码的字母组合 力扣题目记录 216.组合总和III 这个题和昨天的组合差不多&#xff0c;就是判断条件发生了变化…

nodejs+vue+ElementUi会员制停车场车位系统

总之&#xff0c;智能停车系统使停车场管理工作规范化&#xff0c;系统化&#xff0c;程序化&#xff0c;避免停车场管理的随意性&#xff0c;提高信息处理的速度和准确性&#xff0c;能够及时、准确、有效的查询和修改停车场情况。 三、任务&#xff1a;小组任务和个人任务 智…

奇妙编程之旅:揭秘代码的黑科技

你见过哪些令你膛目结舌的代码技巧&#xff1f; 在这篇博客中&#xff0c;我们深入探讨了几个令人惊艳的代码技巧案例&#xff0c;展示了编程世界中的一些黑科技。让我们对这些案例进行一次总结&#xff1a; 列表解析的魔法&#xff1a; 使用列表解析一行代码生成九九乘法表&…