[剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]

【问题描述】[中等]

在这里插入图片描述

【解答思路】

在这里插入图片描述
在这里插入图片描述

1. 快速排序

在这里插入图片描述

时间复杂度:O(N^2) 空间复杂度:O(1)

class Solution {public String minNumber(int[] nums) {String[] strs = new String[nums.length];for(int i = 0; i < nums.length; i++)strs[i] = String.valueOf(nums[i]);fastSort(strs, 0, strs.length - 1);StringBuilder res = new StringBuilder();for(String s : strs)res.append(s);return res.toString();}void fastSort(String[] strs, int l, int r) {if(l >= r) return;int i = l, j = r;String tmp = strs[i];while(i < j) {while((strs[j] + strs[l]).compareTo(strs[l] + strs[j]) >= 0 && i < j) j--;while((strs[i] + strs[l]).compareTo(strs[l] + strs[i]) <= 0 && i < j) i++;tmp = strs[i];strs[i] = strs[j];strs[j] = tmp;}strs[i] = strs[l];strs[l] = tmp;fastSort(strs, l, i - 1);fastSort(strs, i + 1, r);}
}
2. 内置函数

在这里插入图片描述

时间复杂度:O(N) 空间复杂度:O(1)

class Solution {public String minNumber(int[] nums) {String[] strs = new String[nums.length];for(int i = 0; i < nums.length; i++) strs[i] = String.valueOf(nums[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();}
}
3. PriorityQueue

时间复杂度:O(NlogN) 空间复杂度:O(N)

class Solution {/*** 各种组合方式位数都是一样的, => 谁高位小,就选谁;* 因此本质上就是根据这个做排序,难点在于如何判断优先级* 判断高位优先级有好几种办法,*  1.拿出两个数字,逐位对比 vs 位数不相同时,处理比较麻烦*  2.两个数字加和,例如 n , m 对应有 n * pow(10,m) + m 和 m * pow(10,n) + n,谁小选谁,但是int溢出*  3.直接字符串相加, "nm" 与 "mn" 作比较。*  tips:*      1.影响性能的关键就在于排序算法了;*      2.经过思考,两个数字的优先级与其他数字无关!* */public static int compare (int num1 , int num2) {if (num1 == num2) return 0;String nm = new String(num1 + "" + num2);String mn = new String(num2 + "" + num1);return nm.compareTo(mn);}public static String minNumber(int[] nums) {if (nums == null || nums.length == 0) return "";String rx = "";int n = nums.length;PriorityQueue<Integer> priorityQueue = new PriorityQueue<>((o1, o2) -> compare(o1,o2));for (int num : nums) {priorityQueue.add(num);}while (!priorityQueue.isEmpty()) {rx += priorityQueue.poll();}return rx;}
}

【总结】

1.快排最后不熟悉
void fastSort(String[] strs, int l, int r) {if(l >= r) return;int i = l, j = r;String tmp = strs[i];while(i < j) {while((strs[j] + strs[l]).compareTo(strs[l] + strs[j]) >= 0 && i < j) j--;while((strs[i] + strs[l]).compareTo(strs[l] + strs[i]) <= 0 && i < j) i++;tmp = strs[i];strs[i] = strs[j];strs[j] = tmp;//当i==j时 tmp=ij交汇处的值 }//最后把“ij交互处”置换成基准值strs[i] = strs[l];strs[l] = tmp;fastSort(strs, l, i - 1);fastSort(strs, i + 1, r);}

等价于

void fastSort(String[] strs,int l ,int r){if(l>=r) return ;int i = l,j =r;String key= strs[i];while(i<j){while((strs[j] + strs[l]).compareTo(strs[l] + strs[j]) >= 0 && i < j) j--;while((strs[i] + strs[l]).compareTo(strs[l] + strs[i]) <= 0 && i < j) i++;String tmp = strs[i];strs[i] = strs[j];strs[j] = tmp;}//先把”ij交互处置的值“挪到前排strs[l] = strs[i];//最后把“ij交互处”置换成基准值strs[i] = key;fastSort(strs, l, i - 1);fastSort(strs, i + 1, r);}
2. Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));

转载链接:https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/solution/mian-shi-ti-45-ba-shu-zu-pai-cheng-zui-xiao-de-s-4/

Java实现快排:https://blog.csdn.net/qq_36186690/article/details/82470451

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

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

相关文章

div覆盖div DIV相互重叠如何解决

转载出处&#xff1a;http://www.divcss5.com/rumen/r674.shtml div覆盖div,出现div与div盒子之间产生重叠覆盖现象&#xff0c;而内容没有出现覆盖重叠现象原因与解决方法。DIVCSS5通过CSS图文案例介绍产生原因与解决方法。DIV与DIV覆盖原因与解决方法。 可能您遇到过上下结…

第二十五期:5G预约用户超千万!是“虚火”还是“真旺”?

十一假期刚过&#xff0c;“中国5G套餐预约数已超千万”的消息就迅速在朋友圈刷屏&#xff0c;这一庞大的数字背后&#xff0c;也引发了业界关于5G市场的种种思考和担忧&#xff1a;预约热闹过后真正的5G用户会有多少?暂时不选择5G的用户有何顾虑? 十一假期刚过&#xff0c;“…

oracle索引

简介 1.说明 1&#xff09;索引是数据库对象之一&#xff0c;用于加快数据的检索&#xff0c;类似于书籍的索引。在数据库中索引可以减少数据库程序查询结果时需要读取的数据量&#xff0c;类似于在书籍中我们利用索引可以不用翻阅整本书即可找到想要的信息。 2&#xff09;索引…

第八期:实操:两台路由器,如何分别通过WAN和LAN口连接?

两个路由器在一个网段内IP地址是一样的&#xff0c;两个路由器连接有两个DHCP服务器共同工作所以IP会产生冲突。下面我们来一起看下分别通过WAN口和LAN口怎么连接。 两个路由器在一个网段内IP地址是一样的&#xff0c;两个路由器连接有两个DHCP服务器共同工作所以IP会产生冲突。…

cognos10 安装部署

由于工作的原因&#xff0c;今天需要安装下cognos10&#xff0c;由于以前没有接触过IBM的这个产品&#xff0c;因此付出了一天时间的惨痛代价&#xff0c;写这篇文章的目的就是对cognos10的初学者安装部署时能少走弯路&#xff0c;各位cognos的大侠请多批评和指教&#xff0c;不…

GPLT2017题目

阅览室: L1-043. 阅览室 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 天梯图书阅览室请你编写一个简单的图书借阅统计程序。当读者借书时&#xff0c;管理员输入书号并按下S键&#xff0c;程序开始计时&#xff1b;当读者还书时&#…

Spring各jar包的作用(转载)

spring.jar是包含有完整发布的单个jar 包&#xff0c;spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容&#xff0c;因为只有在开发环境下才会用到 spring-mock.jar来进行辅助测试&#xff0c;正式应用系统中是用不得这些类的。 除了spring.jar文件&am…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第15篇]RSA-OAEP和ECIES的密钥生成,加密和解密

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇总是为了让博士生们在第一年结束时知道些什么。通过描述RSA-OAEP和ECIES的密钥生成、加密和解密算法&#xff0c;我们回到了"more crypto" staff …

第二十六期:HTTP 3的前世今生及尝鲜

HTTP/3又迎来一个里程碑&#xff1a;近日Cloudflare官方宣其边缘网络上已全面提供QUIC和HTTP/3支持。那么HTTP/3可以带来哪些变化和优势呢? 对Internet的用户&#xff0c;并且通过浏览器和其他客户端与站点进行高效交互。 HTTP/3又迎来一个里程碑&#xff1a;近日Cloudflare官…

业务时间做开发,使用jeecg框架

最近想在业余时间做一个项目管理的应用给自己用&#xff0c;但自己业余时间又不多&#xff0c;所以就想找一个不用重复写基本代码&#xff08;例如bean、dao、service、action的增删改查&#xff09;&#xff0c;不用重复写jsp代码。这样&#xff0c;我选择了jeecg。它基本满足…

前端中标签页的手写方法

虽然流行用框架写出来 这里也可以用手写方法写出来 也并不是这么复杂 首先为了实现如下效果的标签 我们可以在前端把两个表直接输出出来 <table class "tag char" id "tagf" ><tr><td>Found</td><td>Found time</td&…

Redis中的执行命令的过程

在redis.c的initServerConfig()方法中&#xff0c;通过调用dictCreate方法初始化server端的命令表。这个命令表是一个hashtable,可以通过key找到相关的命令&#xff1a; /* Command table -- we initiialize it here as it is part of the* initial configuration, since comma…

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第16篇]描述DSA、Schnorr和RSA-FDH的密钥生成、签名和验证算法。

这是一系列博客文章中最新的一篇&#xff0c;文章的主题是“做密码学每个博士生都应该知道的52件事”。这一系列问题是为了让博士生们在第一年结束时了解他们应该知道的事情。本周我们将介绍DSA、Schnorr和RSA-FDH的密钥生成、签名和验证算法。 1.DSA 2.Schnorr 3.RSA-FDH Refe…

nutch2.1在windows平台上使用eclipsedebug 存储在mysql的搭建过程

步骤1&#xff1a;准备好eclipse、eclipse svn插件、mysql准备好&#xff0c;mysql使用utf-8编码 步骤2&#xff1a;mysql建库&#xff0c;建表&#xff1a; CREATEDATABASEnutch ; CREATE TABLE webpage (id varchar(767) NOT NULL,headers blob,text mediumtext DEFAULT NULL…

(转)分布式锁的几种使用方式(redis、zookeeper、数据库)

https://blog.csdn.net/u010963948/article/details/79006572转载于:https://www.cnblogs.com/Andrew520/p/10663350.html

[密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第17篇]述和比较DES和AES的轮结构

这是一系列博客文章中最新的一篇&#xff0c;该文章列举了“每个博士生在做密码学时应该知道的52件事”:一系列问题的汇编是为了让博士生们在第一年结束时知道些什么。这周&#xff0c;我们描述和比较DES和AES轮结构。 DES和AES都是迭代分组密码的例子.分组密码通过重复使用一个…

nutch2.1分布式抓取

在上一篇的基础上。 1准备环境&#xff1a;hadoop集群、java、mysql数据库&#xff0c;代码可以在eclipse中运行&#xff0c;可以单机模式下插入数据到mysql数据库。2修改配置文件nutch-site.xml&#xff1a;<property><name>plugin.folders</name><value…

AtCoder-2379 - 连接竹竿 思维 | 数学

Problem Statement Snuke has N integers. Among them, the smallest is A, and the largest is B. We are interested in the sum of those N integers. How many different possible sums there are? Constraints 1≤N,A,B≤109A and B are integers. Input Input is given…

UML用例图

统一建模语言&#xff08;Unified Modeling Language&#xff0c;UML&#xff09;又称标准建模语言&#xff0c;是始于1997年的一个OMG标准&#xff0c;它是一个支持模型化和软件系统开发的图形化语言&#xff0c;为软件开发的所有阶段提供模型化和可视化支持&#xff0c;包括由…

[剑指offer]面试题第[44]题[JAVA][数字序列中某一位的数字][找规律]

【问题描述】[中等] 【解答思路】 找规律 时间复杂度&#xff1a;O(logN) 空间复杂度&#xff1a;O(logN) class Solution {public int findNthDigit(int n) {int digit 1;long start 1;long count 9;while (n > count) { // 1.n - count;digit 1;start * 10;count di…