剑指offer(C++)-JZ45:把数组排成最小的数(算法-其他)

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。

例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。

1.输出结果可能非常大,所以你需要返回一个字符串而不是整数
2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0

数据范围:

0<=len(numbers)<=100

示例:

输入:

[11,3]

返回值:

"113"

解题思路:

本题考察算法思维。两种解题思路:

1)自定义sort比较方式

       自定义sort函数中的比较方式,默认是两个数值比大小,这里是两个字符串叠加谁前谁后的问题。本质上就是另类排序题。

       注意cmp函数定义在类中,需要加static转静态,或者放置在类外作为全局函数,如果不加static标识符,cmp函数就是普通成员函数,不满足sort函数中比较函数的类型要求。

       该算法时间复杂度为O(nlog2n),同快排复杂度。

2)冒泡排序

       和解法一思路一样,只不过不采用STL的sort函数,自写冒泡排序。

       该算法时间复杂度为O(n2),同冒泡排序复杂度。

测试代码:

1)自定义sort比较方式

class Solution {
public:// 重载排序比较static bool cmp(string &s1, string &s2){return s1 + s2 < s2 + s1;}// 输出最小数string PrintMinNumber(vector<int>& numbers) {string result = "";// 判空int size = int(numbers.size());if(size == 0){return result;}// 数字转字符串vector<string> strs;for(int i = 0; i < size; ++i){strs.emplace_back(to_string(numbers[i]));}// 排序sort(strs.begin(), strs.end(), cmp);// 字符串组合for(int i = 0; i < size; ++i){result += strs[i];}return result;}
};

2)冒泡排序

class Solution {
public:// 输出最小数string PrintMinNumber(vector<int>& numbers) {string result = "";// 判空int size = int(numbers.size());if(size == 0){return result;}// 数字转字符串vector<string> strs;for(int i = 0; i < size; ++i){strs.emplace_back(to_string(numbers[i]));}// 冒泡排序for(int i = 0; i < size; ++i){for(int j = 0; j < size - i - 1; ++j){// 如果j叠加j+1比j+1叠加j要大,就把两者换个顺序string s1 = strs[j] + strs[j + 1];string s2 = strs[j + 1] + strs[j];if(s1 > s2){swap(strs[j], strs[j + 1]);}}}// 字符串组合for(int i = 0; i < size; ++i){result += strs[i];}return result;}
};

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

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

相关文章

leetcode 876.链表的中间结点

补充上次的环形链表没细讲的快慢指针&#xff08;这三道题现在可以连起来看&#xff09;&#xff0c;希望对你做题思路有帮助 876.链表的中间结点 题目 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结…

前端 --- HTML

目录 一、网络的三大基石 ​二、什么是HTML 一、HTML 指的是超文本标记语言 二、HTML的作用 三、HTML的标准结构 四、IDE_HBuilder的使用 一、编码工具&#xff1a; 二、集成开发环境 三、HBuilder使用步骤&#xff1a; 五、HTML的标签的使用 一、html_head_body 二、head…

VMware安装Ubuntu系统(Server端,Desktop端步骤一样)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

数据库——索引的数据结构

在数据库中引入索引可以提高查询速率&#xff0c;那么为什么引入索引可以提高查询速率呢&#xff0c;其底层组织数据的数据结构又是什么呢&#xff1f;接下来&#xff0c;一起来探讨索引的数据结构吧&#xff01;&#xff01;&#xff01; 在介绍数据库索引数据库前&#xff0…

springboot项目中注入bean后,调用时报n

需求&#xff1a; 在socket接收到上报数据后&#xff0c;在handler中调用工具类中ProtocolAnalyse的conAnalyse(byte[] data, int dataLen)解析数据。解析数据后&#xff0c;将解析后的结果保存至数据库。注入了三个bean&#xff1a; Autowiredprivate PersonTeService person…

【STM32】TIM定时器输出比较

1 输出比较 1.1 输出比较简介 OC&#xff08;Output Compare&#xff09;输出比较&#xff1b;IC&#xff08;Input Capture&#xff09;输入捕获&#xff1b;CC&#xff08;Capture/Compare&#xff09;输入捕获和输出比较的单元输出比较可以通过比较CNT与CCR寄存器值&#…

五、分支和循环

目录 1. if 语句 1.1 if 1.2 else 1.3 分支中包含多条语句 1.4 嵌套 if 1.5 悬空 else 问题 2. 关系操作符 3. 条件操作符 4. 逻辑操作符&#xff1a; &&&#xff0c;|| &#xff0c;&#xff01; 4.1 逻辑取反运算符 &#xff01; 4.2 与运算符 &&…

Sunshine+Moonlight+Android手机串流配置(局域网、无手柄)

目录 前言Sunshine&#xff08;服务端&#xff09;ApplicationConfigurationGeneralAdvance Moonlight&#xff08;客户端&#xff09;配对打开虚拟手柄串流按键调整退出串流 原神&#xff0c;启动&#xff01; 前言 写这篇文章单纯是因为搜来搜去没有很符合我需求的教程&#…

【SpringBoot】Minio——文件上传与下载

目录结构 下载和启动MinioSpringBoot测试文件上传总结扩展 下载和启动Minio minio下载地址 下载安装 新建一个文件夹&#xff0c;把下载的文件拖过来&#xff0c;并新建一个data目录 进入cmd运行下面命令 出现下面的情况就是配置好了&#xff0c;可以访问本地网站进入 我们的m…

语义分割 DeepLab V1网络学习笔记 (附代码)

论文地址&#xff1a;https://arxiv.org/abs/1412.7062 代码地址&#xff1a;GitHub - TheLegendAli/DeepLab-Context 1.是什么&#xff1f; DeepLab V1是一种基于VGG模型的语义分割模型&#xff0c;它使用了空洞卷积和全连接条件随机&#xff08;CRF&#xff09;来提高分割…

深入微服务架构 | 微服务与k8s架构解读

微服务项目架构解读 ① 什么是微服务&#xff1f; 微服务是指开发一个单个小型的但有业务功能的服务&#xff0c;每个服务都有自己的处理和轻量通讯机制&#xff0c;可以部署在单个或多个服务器上。 微服务也指一种种松耦合的、有一定的有界上下文的面向服务架构。也就是说&…

JWT令牌的获取与过滤器Filter的使用

JWT&#xff0c;全称JSON Web Token&#xff08;JSON Web令牌&#xff09;&#xff0c;是一个开放标准 (rfc7519)。它定义了一种紧凑的、自包含的方式&#xff0c;以JSON对象的形式安全地在各方之间传输信息。这种信息可以被验证和信任&#xff0c;因为它是通过数字签名实现的。…