剑指offer面试题33 把数组排成最小的数

考察点

大数,快排

知识点

题目

分析
本题目给一个整型数组,要求他能排出来的最小的数字。这道题目我们大可以通过排列的方式枚举出所有的数字然后求一个最小的,只不过这种方式时间复杂度非常高。接下来我们通过举例的方式观察我们的思维和数字规律:假如数组有3个元素12,23,34,我们的正常思路肯定是依次遍历元素,观察俩俩元素之间谁放在前面组成的数字更小就把哪个元素放在那个元素的前面,比如我们发现1234要比3412小,所以12这个元素肯定在34的前面,所以其实这就是个快排的思维,只不过比较元素的方式变了,不再是简单的直接比较俩个元素的大小,而是比较俩个元素拼接后的大小。同时一定要注意数组元素是int类型,拼接以后不排除溢出,所以整个算法都需要用对应的string类型来实现

interface CompareFunctionInterface {public boolean compare(String a,String b);
}
public class CompareFunction implements CompareFunctionInterface {@Overridepublic boolean compare(String a,String b) {if (a.compareTo(b) >= 0) {return true;}return false;}
}
public class ThirtyThree {public static void main(String[] args) {int arr[] = {3,32,321};getMin(arr);}public static void getMin(int[] arr) {if (arr == null || arr.length <= 0) {return;}String[] str = new String[arr.length];for (int i = 0;i<arr.length;i++) {str[i] = String.valueOf(arr[i]);}CompareFunction compareFunction = new CompareFunction();quickSort(str,0,arr.length-1,compareFunction);String res = "";for (int i = 0;i<arr.length;i++) {res = res + str[i];}System.out.println(res);}static void quickSort(String[] arr,int start,int end,CompareFunctionInterface func) {if (end <= start) {return;}int mid = partition(arr,start,end,func);quickSort(arr,start,mid-1,func);quickSort(arr,mid+1,end,func);}static int partition(String[] arr,int start,int end,CompareFunctionInterface func) {String privot = arr[end];int index = start - 1;for (int i = start;i<end;i++) {if (func.compare(arr[i],privot)) {index ++;String tmp = arr[i];arr[i] = arr[index];arr[index] = tmp;}}arr[end] = arr[index + 1];arr[index + 1] = privot;return index + 1;}
}

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

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

相关文章

linux shell函数

linux shell脚本默认一般是从头到尾执行&#xff0c;但是有时我们会发现有些脚本段间互相重复&#xff0c;这时我们会考虑是否有一种方法允许将一组命令集或语句形成一个可用快&#xff0c;以方便“引用”&#xff0c;这就是我们即将介绍的linux shell函数 1.function格式 fu…

深入理解Java中的线程安全List:CopyOnWriteArrayList原理和应用

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在Java并发编程中&#xff0c;线程安全的数据结构是至关重要的。其中&#xff0c;CopyOnWriteArrayList是一个线程安全的ArrayLis…

HBase非关系型数据库

HBase非关系型数据库 1 什么是HBase2 HBase的特点3 什么时候需要HBase4 HBase的数据模型5 HBase架构5.1 架构5.2 HBase如何列式储存 6 如何正确设计RowKey 1 什么是HBase HBase – Hadoop Database&#xff0c;是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据…

【More Effective C++】条款35:将非尾端类设计为抽象类

考虑以下继承场景&#xff1a; 通过指针的赋值会出现部分赋值的情况&#xff1a;只修改了Animal的数据成员&#xff0c;Lizard数据没有被修改 class Animal { public:Animal(int data):data(data) {}Animal& operator(const Animal& rhs) {if (&rhs this) retur…

第100+1步 ChatGPT文献复现:ARIMAX预测肺结核 vol. 1

基于WIN10的64位系统演示 一、写在前面 各位大佬&#xff0c;好久不见。 《100步入门机器学习》肝完了&#xff0c;不懂大家学了多少了&#xff0c;默认你们都学完了吧。 今年我们换一个玩法&#xff08;灌水&#xff09;&#xff1a;一系列更接近实战的教程&#xff0c;复…

(黑马出品_07)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_07&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术分布式搜索 今日目标1.数据聚合1.1.聚合的种类1.2.DSL实现聚合1.2.1.Bucket聚合语法1.2.2.聚合结果排序1.2.3.限定聚合范围1.2.4.Metric聚合语法1.2.5.小…

6.S081的Lab学习——Lab1: Xv6 and Unix utilities

文章目录 前言一、启动xv6(难度&#xff1a;Easy)解析&#xff1a; 二、sleep(难度&#xff1a;Easy)解析&#xff1a; 三、pingpong&#xff08;难度&#xff1a;Easy&#xff09;解析&#xff1a; 四、Primes(素数&#xff0c;难度&#xff1a;Moderate/Hard)解析&#xff1a…

node.js入门

一、cmd常用命令 windowsR 再输入cmd 打开命令提示符 (1)切换盘符 c: / d: (2)dir 查看全部内容 (3)cd 你需要打开的文件所处的大文件夹名字 (4)cd 大文件夹名再输入dir 查看该大文件里面的所有内容 (5)输出结果里 一个.表示当前目录&#xff0c;两个..表示上级目录 …

怎样在CSDN赚点零花钱

请教一下各位大佬&#xff0c;看到你们在CSDN很多都几万粉丝以上&#xff0c;能不能分享一下有什么涨粉的经验&#xff0c;还有怎样转化为额外收益……感谢各位提供宝贵的经验&#xff0c;谢谢……

文献阅读笔记:全卷积神经网络

文献阅读笔记&#xff1a;全卷积神经网络 摘要Abstract1. 全卷积神经网络1.1 文献摘要1.2 全卷积神经网络1.2.1 网络结构1.2.0 从分类器到密集 FCN1.2.2 上采样 Upsampling1.2.3 跳级结构1.2.4 FCN训练 1.3 实验1.4 总结 2. 代码实现 摘要 本周学习了全卷积神经网络&#xff0…

Acer宏碁非凡Swift SFG16-71工厂模式原厂Win11系统,预装OEM系统恢复开箱状态

宏基笔记本电脑SFG16-71原装出厂Windows11系统安装工厂包下载&#xff0c;带恢复重置功能 链接&#xff1a;https://pan.baidu.com/s/1JK02kBbwKG_cIBNlEOzrOw?pwdzdfm 提取码&#xff1a;zdfm 原装工厂包系统自带所有驱动、Office办公软件、出厂时自带主题壁纸图片、系统…

如何免费获取基于公网 IP 的 SSL 证书 (无需域名)

现在给网站安装SSL证书来实现网站的HTTPS安全访问已经成了大多数人的共识&#xff0c;但是有一些特殊情况&#xff1a;比如对于个别的应用IP地址不需要绑定域名&#xff0c;只是单纯用IP来访问网站&#xff0c;这种情况下&#xff0c;可以实现HTTPS访问吗&#xff1f; 先说答案…

vue-创建vue项目记录

安装node.js 先安装node.js的运行环境node.js的下载地址 安装后就可以使用npm命令 1、清除npm缓存&#xff1a;npm cache clean --force 2、禁用SSL&#xff1a;npm config set strict-ssl false 3、手动设置npm镜像源&#xff1a;npm config set registry https://registry.…

java8特性 stream流中map函数的使用

map 函数的作用就是针对管道流中的每一个数据元素进行转换操作。 例如 将集合中的每一个字符串&#xff0c;全部转换成大写&#xff01; List<String> collect alpha.stream().map(String::toUpperCase).collect(Collectors.toList()); //上面使用了方法引用&#xf…

10.5.8 优化 InnoDB 磁盘 I/O

如果您遵循了针对 SQL 操作的数据库设计和调优技术的最佳实践&#xff0c;但由于磁盘 I/O 活动频繁&#xff0c;数据库仍然很慢&#xff0c;请考虑这些磁盘 I/O 优化。如果 Unix top 工具或 Windows 任务管理器显示您的工作负载的 CPU 使用率低于 70%&#xff0c; 则您的工作负…

揭密无文件勒索病毒攻击,思考网络安全新威胁

前言 最近几年基于无文件攻击的网络犯罪活动越来越多&#xff0c;一些网络犯罪团伙开发了各种基于无文件攻击的恶意软件攻击套件&#xff0c;这些恶意软件攻击套件可用于勒索病毒、挖矿病毒、RAT远控、僵尸网络等恶意软件&#xff0c;在过去的几年时间里&#xff0c;无文件感染…

L1-8 静静的推荐(Python)

天梯赛结束后&#xff0c;某企业的人力资源部希望组委会能推荐一批优秀的学生&#xff0c;这个整理推荐名单的任务就由静静姐负责。企业接受推荐的流程是这样的&#xff1a; 只考虑得分不低于 175 分的学生&#xff1b;一共接受 K 批次的推荐名单&#xff1b;同一批推荐名单上…

Day35:安全开发-JavaEE应用原生反序列化重写方法链条分析触发类类加载

目录 Java-原生使用-序列化&反序列化 Java-安全问题-重写方法&触发方法 Java-安全问题-可控其他类重写方法 思维导图 Java知识点&#xff1a; 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;序列化数据&#xff0c;身份验证&#xff0c;框架开发&…

pandas plot函数:数据可视化的快捷通道

一般来说&#xff0c;我们先用pandas分析数据&#xff0c;然后用matplotlib之类的可视化库来显示分析结果。而pandas库中有一个强大的工具--plot函数&#xff0c;可以使数据可视化变得简单而高效。 1. plot 函数简介 plot函数是pandas中用于数据可视化的一个重要工具&#xff0…

WPF Window 窗口 常用属性

window窗口属性 属性 定义 属性值 注解 WindowStartupLocation 获取或设置窗口首次显示时的位置。 一个 WindowStartupLocation 值&#xff0c;指定窗口首次显示时的顶边/左边位置。 默认值为 Manual。 将 WindowStartupLocation 属性设置为 Manual 使窗口按其 Left 和 To…