把数组排成最小的数

45. 把数组排成最小的数 我们将数组中的数字转换为字符串,然后按照字符串拼接的大小进行排序。具体地,比较两个字符串aaa和bbb,如果abbaabba,则aaa小于bbb,否则aaa大于bbb。时间复杂度On×log⁡nn×mOn×lognn×m,空间复杂度On×mOn×m。其中 $n $ 和mmm分别为数组的长度和字符串的平均长度。tabs:start。 阅读详情
题目:
输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3, 32, 321}, 则打印出这3个数字能排成的最小数字321323.

思路:
将数组中的每个数字按照某种规则排序,排序之后得到的序列就是这个数组所能排成的最小数字。
需要自定义一个排序的规则,也即就是重写自定义一个compare函数或者仿函数。
排序的规则:
给定两个整数,先将他们转换为字符串之后再分别以不同的顺序将它们组合得到两个组合字符串,使用strcmp函数比较这两个字符串。

class compare
{
public:
    bool operator()( int number1, int number2 )
    {
        char *strNumber1 = new char[10];
        char *strNumber2 = new char[10];

        char *g_strCombine1 = new char[10*2+1];
        char *g_strCombine2 = new char[10*2+1];

        sprintf( strNumber1, "%d", number1 );
        sprintf( strNumber2, "%d", number2 );

        strcpy( g_strCombine1, strNumber1 );
        strcat( g_strCombine1, strNumber2 );

        strcpy( g_strCombine2, strNumber2 );
        strcat( g_strCombine2, strNumber1 );

        int isBigger = strcmp( g_strCombine1, g_strCombine2 );
        delete strNumber1;
        delete strNumber2;
        delete g_strCombine1;
        delete g_strCombine2;
        if ( isBigger <= 0 )
            return false;
        else 
            return true;
    }
};

class Solution
{
public:
    string PrintMinNumber( vector<int> numbers )
    {
        if ( numbers.empty() )
            return string();
        char result[numbers.size()*10];
        memset( result, 0, numbers.size()*10 );
        sort( numbers.begin(), numbers.end(), compare() );
        for ( int i = 0; i < numbers.size(); i++ )
        {
            char temp[10];
            sprintf( temp, "%d", numbers[i] );
            strcat( result, temp );
        }
        return string( result );
    }
};


int main( void )
{
    Solution sos;
    vector<int> numbers = { 10, 89, 5, 10, 55, 99 };
    string result = sos.PrintMinNumber( numbers );
    cout << result << endl;
    return 0;
}

意图识别和纠错问题 可想而知,错误的意图识别会带来多大的负面影响。基于词典,就是对用户query内容和词典内容进行比对,比较常见的方式是序列标注问题里用的最大逆向匹配,通过这种方式找到词典里的实体词,匹配触发了自然就有意图了,而在词典匹配的时候,不是使用链表之类的来构造匹配结构,而是使用搜索树的结构,这种匹配的复杂度最低,速度也快,两者结合,其速度甚至比很多模型要快得多(基本上1ms以内就能完成),fasttext速度非常快,但是textcnn之类的其实就已经达到ms级别以上,bert甚至在10ms级别。 阅读详情

相关推荐

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

把数组排成最小数

第三十一题:把数组排成最小数   题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。   思路:          穷举法(暴力解):                                                  把数组中的数字组...

Accept 284

【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架

基于二人爱情耦合系统动力学、稳定性与最优策略的综合性理论的数值模拟与分析

weixin_44695861的博客 1135

数组排序组合最小数字

给定一个整型数组,对这个数组排序,使得按序拼接数组各个元素得到的数值最小。 例如 [3,83,8,13,1]  排序后为:[1,13,3,83,8] 依次拼接得到 1133838 思路: 一,如果不考虑效率,那么可以对所有的数字进行依次排列组合,求出最小的那么效率不高,而且实现所有数字的排列组合也比较麻烦。 二:换个思路,首先还是对数组进行排序,求出排序后拼接最小的数字,外部排序可以选用各...

weixin_34248118的博客 382

python blp模型 估计_随机系数Logit模型及Stata实现

欢迎投稿(荐稿)计量经济圈,计量相关都行邮箱:econometrics666@sina.cn作者:北京交通大学经济管理学院博士生,王琦珀。欢迎你加入计量经济圈社群,一起探讨前沿计量理论和实证方法。一、随机系数Logit模型1.背景实证产业组织(Empirical Industrial Organization,EIO)是目前产业组织理论的前沿,其中又以Ariel Pakes为带头人,其近期工作论文...

weixin_42298927的博客 2641

先后多个字段排序

Comparator nameComparator = Collator.getInstance(Locale.CHINA); departmentInfoList.sort(Comparator.comparingInt(DepartmentInfo::getSort).reversed() .thenComparing(DepartmentInfo::getName, nameComparator)); 针对有多个排序条件的情况进行排序,前面的排序规..

weixin_43759606的博客 380

Python 安装 PyTorch(GPU)详细教程

本章教程,介绍如何安装PyTorch GPU版本的具体教程。

猿小白的博客 1635

把数组中的数拼接起来,求最大值(最小值)

问题分析 最暴力的解法就是把所有的组合都找出来, 然后排序得到最大值(或者最小值),这样还搞什么算法,直接抛弃. 这个问题的思路为: 在一个数组中依次选出最合适的值放在结果中. 那么问题就变成了如何选出最合适的值, 下面以求最大值为例说明: 对于两个数比较, 首先要考虑的就是位数的差异, 比如 9和 10 从值的大小比较, 那应该是10胜出, 但是 109 肯定没有 910大. 所以比较的时候要把

zckongbai的博客 8579

这款值68亿的游戏,你不实战一下吗?安排!

本文介绍了如何使用Cocos开发传送带像素消除类游戏。游戏包含像素画、传送带、炮台等核心元素,需要先解析图片生成像素数据,再通过关卡编辑器设计关卡机制。炮台会在传送带上环绕运动,发射子弹消除匹配颜色的像素点。文章详细讲解了游戏对象实现方法,包括像素生成、传送带运动轨迹、炮台瞄准算法等,并展示了实战效果。完整源码已集成到亿元Cocos小游戏实战合集中,适合对像素消除游戏开发感兴趣的开发者参考。

lsw_Cs的博客 438

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5718

数组求最小组合数

输入一个非负整数数组numbers,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 例如输入数组[3,32,321],则打印出这三个数字能排成的最小数字为321323。 1.输出结果可能非常大,所以你需要返回一个字符串而不是整数 2.拼接起来的数字可能会有前导 0,最后结果不需要去掉前导 0 数据范围: 0<=len(numbers)<=100 示例1 输入: [11,3] 复制返回值: "113" 两个数组成最小的数,需要将两个数组成之后的

Be_insighted的博客 1188

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

牛客题解 | 把数组排成最小的数

牛客题库题解

wc529065的博客 987

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 这一的本意就是重写排序的比较函数 import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; ...

weixin_38114913的博客 211

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

47、把数组排成最小的数

题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 class Solution { public: static bool cmp(int a, int b){ string tmp1 = to_string(a).appen...

T_or_F的博客 177

【转帖】把数组排成最小的数

转自:http://zhedahht.blog.163.com/blog/static/25411174200952174133707/ 题目:输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。例如输入数组{32, 321},则输出这两个能排成的最小数字32132。请给出解决问题的算法,并证明该算法。 分析:这是09年6月份百度...

angmoci4456的博客 112

数组之把数组排成最小的数

1.本题知识点    数组,大数问题(转成字符串拼接就能解决),自定义排序规则 2. 题目描述   输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 3. 思路    将数组通过某种规则排序,使得排序后的数组元素拼接起来最小,然后打印出来即可。    排序规则:输入a...

守得云开见月明 314

46.把数组排成最小的数

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组 [3,32,321],则打印出这 3 个数字能排成的最小数字 321323。输入:[3, 32, 321]数组长度 [0,500]。输出数字的格式为字符串。

m0_56312312的博客 179

把数组排成最小的数(先定最小的数)

输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 import java.util.ArrayList; public class Solution { public String PrintMinNumber(int [] numbers) { Stri...

胖墩的IT博客 299

剑指Offer——把数组排成最小的数

1、题目描述   输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 2、代码实现 package com.baozi.offer; /** * 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 * 例如输...

weixin_30802273的博客 78
上一篇: 从1到N整数中1出现的次数
下一篇: 丑数
Findway_
博客等级 码龄10年 36粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值