把数组排列成最小的数(详解)

题目:

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

题目解析:

  看到这道题最直接的方法是先求出这个数组中所有数字的全排列,然后将每一种去安排列拼接,然后从拼接中找出最小的数,但是这样的效率明显较低,那么有咩有高效的方法呢?当然有,就是定义一个排序的规则。要定义一个排序的规则,就要比较两个数,假设这两个数是m和n,我们需要确定一个规则来决定那个应该排在前面,这里不仅仅是要对数值的比较。
  根据题目的要求,两个数字m和n能拼成数字mn和nm,如果mn>nm,我们就应该让n在前m在后,也就是定义n小于m,反之同理。如果mn=nm,就要定义n等于m。
  接下来就要考虑怎么去拼接数字,如果是两个int类型的直接拼接,很有可能就溢出了,所以我们要使用字符串去拼接。既然这样,我们就应该在开始将数组中的整数转换为字符串,这样在拼接的时候就方便多了,并且不用考虑溢出的问题。
  一个有效的比较规则需要满足三个条件:自反性、对称性和传递性,那么我们就来证明一下:
  自反性:显然有 aa=aa ,所以a = a;
  对称性:如果a > b,则有ab > ba,所以ba > ab,则有b > a;
  传递性:如果a > b,则有ab > ba。假设a和b用十进制表示时各自有 x位和y位,于是ab = ax10y+b,ba = bx10x+a;传递性如下图:
在这里插入图片描述
所以这个比较规则有效。

代码解析:
class Solution {
public://排序规则static bool cmp(int a, int b){string A = "";string B = "";A+=to_string(a);A+=to_string(b);B+=to_string(b);B+=to_string(a);return A<B;}string PrintMinNumber(vector<int> numbers) {if(numbers.empty())return "";string ret = "";sort(numbers.begin(),numbers.end(),cmp);for(size_t i = 0; i < numbers.size(); ++i)ret += to_string(numbers[i]);return ret;}
};

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

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

相关文章

Linux tar命令详解

tar -c: 建立压缩档案 -x&#xff1a;解压 -t&#xff1a;查看内容 -r&#xff1a;向压缩归档文件末尾追加文件 -u&#xff1a;更新原压缩包中的文件 这五个是独立的命令&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和别的命令连用但只能用其中一个。下面的参数是根…

人工智能预测AI系统的“心灵”与“行为”

来源&#xff1a;中国科学网任何同Siri或Alexa有过令人沮丧的互动体验的人都知道&#xff0c;数字助理无法同人类媲美。而它们需要的是被心理学家称为“心智理论”的东西—— 一种意识到其他人的信念和欲望的能力。如今&#xff0c;计算机科学家创建了能窥探其他计算机“心灵”…

Linux grep命令详解

Linux grep命令用于查找文件里符合条件的字符串。 grep指令用于查找内容包含指定的范本样式的文件&#xff0c;如果发现某文件的内容符合所指定的范本样式&#xff0c;预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称&#xff0c;或是所给予的文件名为&q…

java基础1

1. 变量须先声明&#xff0c;再赋值&#xff0c;才使用。 &#xff08;1&#xff09;方法内的变量叫局部变量&#xff0c;方法外的变量叫成员变量 &#xff08;2&#xff09;基本数据类型&#xff1a;4类8种。 其余的叫引用数据类型。 &#xff08;3&#xff09;变量作用域&…

Firebug控制台详解[转]

Firebug是网页开发的利器&#xff0c;能够极大地提升工作效率。 但是&#xff0c;它不太容易上手。我曾经翻译过一篇《Firebug入门指南》&#xff0c;介绍了一些基本用法。今天&#xff0c;继续介绍它的高级用法。 Firebug控制台详解 作者&#xff1a;阮一峰 控制台&#xff0…

跳石板(详解)

题目链接&#xff1a; https://www.nowcoder.com/practice/4284c8f466814870bae7799a07d49ec8?tpId85&&tqId29852&rp1&ru 题目分析&#xff1a; 这道题就是计算从N开始加&#xff0c;最少加几次等于M&#xff0c;前提条件是每次相加的数必须是当前数的约数 思…

Python面试题大全(一):基础知识学习

目录 Python基础 文件操作 1.有一个jsonline格式的文件file.txt大小约为10K 2.补充缺失的代码 模块与包 3.输入日期&#xff0c; 判断这一天是这一年的第几天&#xff1f; 4.打乱一个排好序的list对象alist&#xff1f; 数据类型 5.现有字典 d {a:24,g:52,i:12,k:33}请…

智能机器人与系统高精尖创新中心2018年度开放基金项目申报通知

来源&#xff1a;机器人大讲堂摘要&#xff1a;为推动中心的基础研究和关键技术的自主创新&#xff0c;聚集和培养优秀青年科技人才&#xff0c;使中心成为国内智能机器人与系统领域高水平科学和技术研究的重要基地&#xff0c;特设立开放基金。智能机器人与系统高精尖创新中心…

分享一个基于jQuery,backbone.js和underscore.js的消息提示框架 - Backbone.Notifier

在线演示 本地下载 我们曾今在以前的文章中介绍过jQuery的警告和提示框插件&#xff0c;今天这里我们介绍一个开源的消息提示框架 Backbone.Notifier&#xff0c;目前版本为version0.1。使用这个框架可以帮助你构建非常灵活强大的浏览器端消息提示功能。这个框架依赖于&#…

杨辉三角变形(高效解析)

题目链接&#xff1a; https://www.nowcoder.com/practice/8ef655edf42d4e08b44be4d777edbf43?tpId37&&tqId21276&rp1&ru 题目解析&#xff1a; 拿到这道题大多数人的第一反应都是先将杨辉三角用一个二维数组表示出来&#xff0c;然后直接在第n行找就可以了&a…

Python面试题大全(二):python高级语法

目录 Python高级 元类 42.Python中类方法、类实例方法、静态方法有何区别&#xff1f; 43.遍历一个object的所有属性&#xff0c;并print每一个属性名&#xff1f; 44.写一个类&#xff0c;并让它尽可能多的支持操作符? 45.介绍Cython&#xff0c;Pypy Cpython Numba各有…

生物科技发展与人类命运共同体塑造

来源&#xff1a;学习时报摘要&#xff1a;生物科技的发展是人类文明发展的缩影。当前&#xff0c;生物科技的新一轮变革&#xff0c;正广泛渗透到人类经济、社会、文化、军事、政治等领域&#xff0c;其对人类伦理、法律、环境、安全、国际关系等领域的影响越来越大。生物科技…

和为S的连续正数序列(双指针详解)

题目解析&#xff1a; 题目是小明算数&#xff0c;这里不赘述&#xff01;->题目链接<-   看到这道题目的可以马上想到等差数列&#xff0c;这个题目可以换一种说法就是求有多少个等差数列的和为sum&#xff0c;可以直接用公式计算&#xff0c;但是公式计算个人感觉有一…

Python面试题大全(三):Web开发(Flask、爬虫)

目录 Web Flask 140.对Flask蓝图(Blueprint)的理解&#xff1f; 141.Flask 和 Django 路由映射的区别&#xff1f; Django 142.什么是wsgi,uwsgi,uWSGI? 143.Django、Flask、Tornado的对比&#xff1f; 144.CORS 和 CSRF的区别&#xff1f; 145.Session,Cookie,JWT的…

七大科技巨头的最新人工智能布局

来源&#xff1a;资本实验室摘要&#xff1a;近几年&#xff0c;全球人工智能技术的发展与应用突飞猛进。近几年&#xff0c;全球人工智能技术的发展与应用突飞猛进。例如&#xff0c;各大公司的自主驾驶汽车测试如火如荼&#xff0c;许多人每天都在家里使用像Alexa这样的人工智…

SilverLight之我见

SliverLight 是微软公司全力打造的一种跨平台&#xff0c;跨浏览器的RIA新技术&#xff0c;SilverLight以XAML为界面呈现语言&#xff0c;支持2D图形&#xff0c;文字&#xff0c;动画&#xff0c;数据双向绑定&#xff0c;控件风格与模板&#xff0c;Linq,WCF&#xff0c;JSON…

Python面试题大全(四):数据库篇

目录 数据库 MySQL 198.主键 超键 候选键 外键 199.视图的作用&#xff0c;视图可以更改么&#xff1f; 200.drop,delete与truncate的区别 201.索引的工作原理及其种类 202.连接的种类 203.数据库优化的思路 204.存储过程与触发器的区别 205.悲观锁和乐观锁是什么&am…

有史以来最精彩的自问自答:OpenAI 转方块的机械手

机械手任务之三 - 转鸡蛋&#xff0c;示意图来源&#xff1a;AI 科技评论摘要&#xff1a;今年 2 月&#xff0c;OpenAI 发起了一组机械手挑战&#xff0c;他们在基于 MuJoCo 物理模拟器的 Gym 环境中新设计了含有机械臂末端控制、机械手拿取物体的两组八个有难度的、早期强化学…

寻找两个有序数组的中位数(虚拟数组图文详解)

思路一&#xff08;暴力&#xff09;&#xff1a; 当看到这个题目的时候可能会觉的是不是系统高估了这个题目&#xff0c;这个这么简单&#xff0c;只需要将两个数组合并&#xff0c;排序然后合并就好了。这样做确实可以求出中位数&#xff0c;但是并不能说是完成题目的要求&am…

uva540

题目的意思大概就是现在让你做一个数据结构&#xff0c;具体的应该是一个队列&#xff0c;有一堆元素&#xff0c;这堆元素拥有两个特性&#xff0c;一是它的值&#xff0c;二是它所在的team值。这个队列满足以下的一些性质&#xff08;操作&#xff09;。 ENQUEUE(k) &#xf…