剑指offer-32、把数组排成最⼩的数

news/2025/9/23 9:01:27/文章来源:https://www.cnblogs.com/sevencoding/p/19102970

题⽬描述

输⼊⼀个正整数数组,把数组⾥所有数字拼接起来排成⼀个数,打印能拼接出的所有数字中最⼩的⼀个。例如输⼊数组 {3,32,321} ,则打印出这三个数字能排成的最⼩数字为 321323 。

示例1
输⼊:[3,32,321]
返回值:"321323"

思路及解答

自定义排序(推荐解法)

这道题要求拼起来的数是最⼩的数字,其实是⼀个排序问题,只要理解了这⼀点,就可以快速解决。

假设有两个字符串 s1=3 , s2=32 ,那 s1+s2=332 , s2+s1=323 ,也就是 s1+s2>s2+s1 。

像上⾯这种情况,要想拼接起来的数最⼩,肯定是 s2 在前⾯, s1 在后⾯。

⽽在数组中,我们要使所有的拼接起来是最⼩,则需要两两⽐较,类似排序,把满⾜ s1+s2>s2+s1 的s1 放到后⾯, s2 放到前⾯。

public class Solution {public String PrintMinNumber(int [] numbers) {String[] strs = new String[numbers.length];for(int i = 0; i < numbers.length; i++)strs[i] = String.valueOf(numbers[i]);Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));StringBuilder res = new StringBuilder();for(String s : strs)res.append(s);return res.toString();}}
  • 时间复杂度 : O(nlogn) , n 为 nums 数组的⻓度,使⽤内置排序函数的平均时间复杂度为O(nlogn) ,最差为 O(n2 ) 。
  • 空间复杂度: O(N)

手动实现快速排序

我们也可以不依赖内部排序,自己手动实现

public class Solution {public String PrintMinNumber(int[] numbers) {if (numbers == null || numbers.length == 0) return "";String[] strs = new String[numbers.length];for (int i = 0; i < numbers.length; i++) {strs[i] = String.valueOf(numbers[i]);}// 手动实现快速排序quickSort(strs, 0, strs.length - 1);StringBuilder sb = new StringBuilder();for (String s : strs) {sb.append(s);}return sb.toString();}private void quickSort(String[] strs, int left, int right) {if (left >= right) return;int pivotIndex = partition(strs, left, right);quickSort(strs, left, pivotIndex - 1);quickSort(strs, pivotIndex + 1, right);}private int partition(String[] strs, int left, int right) {String pivotValue = strs[right];int i = left;for (int j = left; j < right; j++) {// 使用自定义比较规则if ((strs[j] + pivotValue).compareTo(pivotValue + strs[j]) <= 0) {swap(strs, i, j);i++;}}swap(strs, i, right);return i;}private void swap(String[] strs, int i, int j) {String temp = strs[i];strs[i] = strs[j];strs[j] = temp;}
}

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

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

相关文章

商城网站设计注意什么厦门网站到首页排名

perlnginx是一个高性能的http和反向代理服务器&#xff0c;并发能力很强&#xff0c;一般用来做负载均衡比较多&#xff0c;分布式系统开发中用作web服务器。 一、下载 地址&#xff1a;nginx: download 我们下载这个稳定版本 二、环境依赖检查 nginx安装需要很多外部依赖&…

强化学习算法如何控制人形机器人行走的 —— 策略映射动作,动作如何控制电机?

强化学习算法如何控制人形机器人行走的 —— 策略映射动作,动作如何控制电机?实例:基于actor-critic强化学习的机器人控制框架。强化学习策略π基于机器人当前状态和参考运动状态,计算出一个动作增量δa,加参考关…

宣武网站开发动画制作学什么专业

资料&#xff1a;https://www.shiyanlou.com/courses/running1 Linux目录结构说明可以使用tree来查看目录结构sudo apt-get install tree 安装treetree / 查看根目录的结构将目录定义为四种交互作使用的形态&#xff1a;2 路径. 表示当前目录.. 表示上一级目录 - 表示上一次所在…

加强文明网站建设网站中转页怎么做

注解是方法的“标签” 说明每个方法的“职责” Q:总共有那些注解? 参见官方的API文档 0.常用主机及其特点 BeforeClass 只会执行一次必须用static修饰常用来初始化测试需要的变量 Before 会执行多次&#xff08;只要写一次&#xff09;在每个Test执行执行之前执行可以和…

帮助做APP的网站公司.net 大型网站开发

原文地址&#xff1a;http://android.xsoftlab.net/training/keyboard-input/commands.html 当用户将焦点给到可编辑文本的View时&#xff0c;例如EditText这种&#xff0c;并且该设备还拥有实体键盘&#xff0c;那么所有的输入都会被系统处理。然而&#xff0c;如果你希望可以…

做响应式网站对设计图的要求wordpress上传附件到FTP

java formatDate 时间时&#xff0c;经常需要输入格式比如 YYYYMMDD,yyyyMMdd 这两个是有区别的 具体每个参数可以看下面

网站备案撤销原因烟台建站程序

描述 这是一个古老的字符串加密方法&#xff0c;给定两个长度不超过100个字符的字符串&#xff0c;判断是否可以把其中一个重排&#xff0c;然后对26个字母做一个一一映射&#xff0c;使得两个字符串相同。 再进行映射&#xff1a;例如 每个字母映射到前一个字母&#xff08;B…

个人网站可以做资讯小说类网站平台建设需求的意见

概述在使用EF Core的时候&#xff0c;有时候我们需要追踪它生成的sql语句&#xff0c;那么方法那么多&#xff0c;我们怎么知道对应的sql语句是在代码哪里呢&#xff0c;这时候就需要一个备注&#xff0c;TagWith()能够帮助我们生成对应的注释信息。查询标记有助于将代码中的LI…

建设部网站官网合同网站建设公司哪家好速找盛世传媒

List的特点有哪些&#xff1f; Java中的List是一种存放有序的、可以重复的数据的集合&#xff0c;它允许重复元素的存在。List中的元素都有对应的一个序列号(索引)记录着元素的位置&#xff0c;因此可以通过这个序列号来访问元素。 ‍ Java中集合有哪些&#xff1f; Java中…

注册网站请签署意见是写无the_post wordpress

AndroidJniDemo1安卓对c进行so文件打包&#xff0c;并以jni的形式进行调用项目中的部分app &#xff1a; 编译so文件jniDemo: 添加运行so文件开发环境&#xff1a;android studio 3.0.1(As3.0以上创建项目&#xff0c;选择支持c/c,项目会自动生成需要的配置&#xff0c;不需要在…

网站仿站建设购买服务器后怎么搭建

Dotar是一个包含了zsh, spacevim(nvim), tmux和许多其它工具的多合一的Mac/Ubuntu开发环境 背景 Dotar的名字源于dot和tar的结合&#xff0c;代表者打包(tar)文件。 开始 需求 zsh, tmux, vim, ag已经安装&#xff0c;并且zsh作为你的默认终端: chsh -s $(which zsh)如果…

网站运营有前途吗去年做那个网站致富

关于产生错误 “The as operator must be used with a reference type or nullable type (System.DateTime is a non-nullable value type) ” 今天写数据转换器&#xff0c;需要将按照时间值显示不同的时间格式字符串。 结果在Convert里发现这么写报错。 public object Conve…

定西网站建设公司排名照片jquery

//冒泡排序 //①思路,先比较出第一次,找一个最大的值,排到最后; //②重复count遍之后,就能得到排序; //③优化,每一次循环之后不需要再次全部重复; $array [11,5,4,58,1,222,34]; for ($j 0; $j< count($array)-1; $j) { for($i 0 ; $i < count($array)-$j-1; $i){if(…

自助购物网站怎么做房产网签是什么意思

DevExpress .NET MAUI多平台应用UI组件库提供了用于Android和iOS移动开发的高性能UI组件&#xff0c;该组件库包括数据网格、图表、调度程序、数据编辑器、CollectionView和选项卡组件等。 获取DevExpress v24.1正式版下载 Material Design是一个由Google开发的跨平台指南系统…

湖南做网站 磐石网络引领肥城网站设计公司

文章目录 1.类与类加载器2.类加载器加载规则3.JVM 中内置的三个重要类加载器为什么 获取到 ClassLoader 为null就是 BootstrapClassLoader 加载的呢&#xff1f; 4.自定义类加载器什么时候需要自定义类加载器代码示例 5.双亲委派模式类与类加载器双亲委派模型双亲委派模型的执行…

连云港市建设局网站安全员考试深圳网站的网络公司

一、概念 首先要了解一个思想就是IOC思想(控制反转)&#xff0c;由此我们便需要使用DI(依赖注入)&#xff0c;依赖注入可以注入对象、字符串、等等&#xff0c;在注入对象时&#xff0c;我们往往需要手动new一个对象进行注入&#xff0c;自动装配就是代替我们手动new对象这一过…

做网站应该用什么语言来开发网络挣钱

随着医院的不断扩大与发展&#xff0c;能源问题日益严重。大型医院能耗计量点位繁多&#xff0c;数据采集方式落后&#xff0c;难以保证计量管理的准确性与科学性。为了对医院能耗进行精细化管理&#xff0c;实时监测用能情况&#xff0c;需要建议一个完善的监管体系。基于能源…

广州网站ui设计网站建设开发的目的

Stream的创建方式有很多种&#xff0c;除了最常见的集合创建&#xff0c;还有其他几种方式。 List转Stream List继承自Collection接口&#xff0c;而Collection提供了stream()方法。 List<Integer> list Lists.newArrayList(1, 2, 3); Stream<Integer> stream li…

帮人做网站赚钱织梦网站版权

本文内容来自 Intel极限存储架构和开发首席工程师 梁震 在2021CCF全国高性能计算学术年会&#xff08;CCF HPC China 2021&#xff09;上的演讲资料&#xff0c;供大家参考。 目录 - 分布式异步对象存储(DAOS)的系统架构 - DAOS系统栈结构 - DAOS 的部署方式 - DAOS 存储服…

东营网站建设怎么建设广告设计与制作视频教程

追加用户组 groupadd 用户组名 追加新用户 useradd -d 指定用户目录 -s 指定用户使用shell -g 指定用户组 -p 指定用户密码 用户名 更改用户 添加用户到其他组 usermod -G 用户组 用户名 修改用户密码 passwd 用户名 删除用户 userdel [参数] 用户名参数&#xff1a;-f&#x…