剑指offer45 把数组排成最小的数

2023-10-30

题目链接

链接

在这里插入图片描述

其实这道题,大概看完就知道是一个排序的问题,无非就是数组中的元素以一个合适的位置排好序,这样从头加到尾,组成的整体数字最小!(题目中也暗示你排序问题了)

个人捉摸了一会,这道题能很好地锻炼仿函数的编写规则和库函数sort()的配套使用,还有就是巧妙地字符串操作和贪心思想,因此将它记录;


解法1,调用sort()

解题思路

核心: 怎么确定元素a,b的先后顺序?

贪心思想: 先将a,b两数字转成string,之后如果a+b<b+a**,那么**a就排在b前面,以此类推;

最终将排好序的每个数组转string全部从头到尾按顺序拼接即可;

实现代码

#include <string>
class Solution {
public:
    class cmp{
        public:
        bool operator()(int a,int b)
        {
            //先分别转正string
            string sa = to_string(a);
            string sb = to_string(b);
            
            return sa+sb<sb+sa;       
        }
    };
    string PrintMinNumber(vector<int> numbers) {
        //处理空串
        if(numbers.size()==0) return "";
        //按照贪心仿函数规则,调用sort
        sort(numbers.begin(),numbers.end(),cmp());

        //依次拼接最终答案
        string ret;
        for(auto&e:numbers){
            ret+=to_string(e);
        }
        return ret;
    }
};

这里要注意的点是我们调用库函数sort(),那么注意他的仿函数比较大小的规则:

源码如下:

在这里插入图片描述

less<int>递增,如1,2,3,4,5: 仿函数源码: return a<b;

greater<int>递减,如5,4,3,2,1: 仿函数源码: return a>b;

调用sort()想要递增or递减完全是按照大于号或者小于号的方向指示的;

解法2,冒泡排序的扩展

可万一面试官突然不让你算法sort()函数了呢?不慌,贪心思想都想出来了,无非就是手撕一个排序嘛,量元素比较的时候套用我们的贪心思想比较即可!

实现代码

class Solution {
public:
    string PrintMinNumber(vector<int> numbers) {
       //处理空串
        if(numbers.size()==0) return "";
        
		string res;
        //冒泡排序
        for(int i = 0; i < numbers.size() - 1; i++){
            for(int j = 0; j < numbers.size() - i - 1; j++){
                //数字转string好贪心处理
                string s1 = to_string(numbers[j]);
                string s2 = to_string(numbers[j+1]);
                
                //贪心比较拼接的大小交换位置
                if(s1+s2 > s2+s1)
                    swap(numbers[j], numbers[j + 1]);
            }
        }
        //字符串叠加返回
        for(int i = 0; i < numbers.size(); i++)
            res += to_string(numbers[i]);
        return res;
    }
};

这样写法我们就不用注意sort()库函数里的大于小于号的方向了,万全按照自己的逻辑进行比较即可,可以看到,我们交换时采用的是s1 > s2,而sort()方法中使用的则是<,这是因为人家sort()内部有自己的传参和比较的逻辑,我们不必太纠结,知道怎么正确用它就好!

这题的关键是贪心,可以好好品味字符串的魅力,不让用sort(),那可以手撕排序,比如冒泡,快排都往上写,尽情秀你的代码能力!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

剑指offer45 把数组排成最小的数 的相关文章

  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 根据属性的类型使用文本框或复选框

    如果我有这样的结构 public class Parent public string Name get set public List
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • 国产FPGA芯片,机遇与挑战并存

    FPGA是可以先购买再设计的 万能 芯片 FPGA Field Programmable Gate Array 现场可编程门阵列 是在硅片上预先设计实现的具有可编程特性的集成电路 它能够按照设计人员的需求配置为指定的电路结构 让客户不必依赖
  • 数据结构中缀表达式转换为后缀表达式并求值,pta试题,小白心酸史

    数据结构中缀表达式转换为后缀表达式并求值 1 中缀表达式转换为后缀表达式并求值 100分 把题目给出中缀表达式转换为后缀表达式输出 并求后缀表达式的值 为简单起见 我们约定 1 输入的中缀表达式一定是合法的 并且只含数字 四种运算符 和小括
  • 我的opencv3.1+vs2015配置

    opencv下载地址 www opencv org 下载opencv3 1版本 其实是个压缩文件zip 然后解压 解压文件说明 build 里是各平台的jar dll sources 是源文件 头文件 框架等等 设置环境变量 右键我的电脑
  • R语言介绍

    1 R的统计计算和绘图功能十分强大 2 R是一种区分大小写的解释型语言 R的赋值符号是 lt 而不是传统的 号 3 x lt rnorm 5 表示了一个名为x的向量对象 它包含5个来自标准正态分布的随机偏差 4 注释是有 开头 再 之后的任
  • 使用canvas进行图片压缩(前端图片压缩核心处理)

    一 原理 实际上就是利用canvas进行重新绘制 1 先将图片的file文件转成baseURL 2 创建一个image标签去接收文件获取图片的宽高和比例 3 创建canvas画布设置画布的大小 4 将图片绘制到canvas上面 5 对can
  • vue-json-viewer展示JSON内容

    文章目录 01 前言 02 接口内容预处理 03 json viewer使用 01 前言 最近写的一个小案例 需要将接口返回的JSON内容显示在页面上 要求是要和控制台返回的JSON内容一样能点击展开显示或者关闭 当时只知道处理内容格式 后
  • [AHK]输入法状态提示,中文状态提示“中”,英文状态提示“EN”

    输入法状态提示 中文状态提示 中 英文状态提示 EN 切换中英文状态的时候 或者用鼠标切换到另一个编辑窗口的时候再次提示 循环如此 功能 输入法状态提示 环境 win10 搜狗输入法 输入法状态切换用默认的shift键 作者 sunwind
  • 【100天精通Python】Day52:Python 数据分析_Numpy入门基础与数组操作

    目录 1 NumPy 基础概述 1 1 NumPy的主要特点和功能 1 2 NumPy 安装和导入 2 Numpy 数组 2 1 创建NumPy数组 2 2 数组的形状和维度 2 3 数组的数据类型 2 4 访问和修改数组元素 3 数组操作
  • s7300的db块详细说明_s7-300与s7-200的mpi通信中db块的详细使用

    哪位有s7 300与s7 200的mpi通信中db块与v区对应详细资料 另外我想问一下想用组态软件与s7 300做mpi通信 然后用e277模块与s7 300做dp通信同时组态软件也能访问s 200不知道可不可以 硬 软件组态方面应该怎样连
  • vim的超详细使用方法

    文章目录 vim的四种模式 命令模式详解 移动光标 快速定位光标 复制 粘贴 剪切和删除 撤销和恢复 编辑模式详解 底行模式详解 保存和退出 文件内容的替换 显示行号 paste 查找和搜索 可视化模式 批量注释 批量去注释 vim是史上最
  • VC6.0无法安装,老是未响应

    今天我安装VC6 0 然后发现老是安装的进候 刚进去就程序未响应 特别的郁闷 弄了好多次 开始是怀疑是安装程序的问题 后来我换了一个版本 还是不可以 最后想想可能是因为我的WINDOWS分区的原因 因为我的系统本身是VISTA的 后来装双系
  • 利用傅立叶变换进行图像处理的代码演示

    前面有篇文件介绍过使用DCT 离散余弦 变换进行图像处理的例子 Matlab一探DCT IDCT变换在图像压缩中的应用 tugouxp的专栏 CSDN博客绝大多数图像都有一个共同特征 平坦区域和内容缓慢变化的区域占据一幅图像的大部分 而细节
  • Win11蓝屏代码IRQL NOT LESS OR EQUAL的处理方法

    蓝屏错误IRQL NOT LESS OR EQUAL是用户常见的系统故障了 升级到Win11新系统也遇到了同样的问题 那么Win11蓝屏问题IRQL NOT LESS OR EQUAL要如何解决 下面就来看看小编整理的解决办法 什么是 IR
  • Java 8: 元空间(Metaspace)

    前言 很多开发者都在其系统中见过 java lang OutOfMemoryError PermGen space 这一问题 这往往是由类加载器相关的内存泄漏以及新类加载器的创建导致的 通常出现于代码热部署时 相对于正式产品 该问题在开发机
  • 解决报错:错误1130- Host xxx is not allowed to connect to this MariaDb server

    在云服务器上面搭建了MariaDb MariaDB是MySQL源代码的一个分支 但是远程链接不上 首先 你要确保服务器安全组3306端口已经开放 在确保端口开放的情况下 如果出现错误代码1130 Host xxx is not allowe
  • SuperPoint 论文详解

    SuperPoint 该论文是 magic leap 公司在18年的一篇工作 而且提供了代码 基于 pytorch 的 不过遗憾的是训练代码和相应的渲染的训练数据没提供 主要思路 本文提出了一个自监督的方式去训练网络来提取特征点以及计算描述
  • 【LoadRunner】解决LR11无法录制Chrome浏览器脚本问题

    LoadRunner 解决LR11无法录制Chrome浏览器脚本问题 LoadRunner录制脚本时 遇到高版本的IE FireFox 或者Chrome浏览器 会出现无法录制脚本的问题 下面就来讲一下如何利用LR自带的wplus init
  • tflearn anaconda 安装过程记录

    准备工作 gcc升级为4 8 2glibc升级为2 18 opt xxx xxx components ficlient bigdata env 里加入 export LD LIBRARY PATH usr local lib usr lo
  • SpringBoot调取OpenAi接口实现ChatGpt功能

    很高兴和大家分享我实现的一个小项目 利用 Spring Boot 实现了一个 ChatGpt 对话系统 在本文中 我将详细介绍这个项目的实现步骤 以及代码实现 什么是 ChatGpt ChatGpt 是一种基于 GPT 技术的对话系统 能够
  • 剑指offer45 把数组排成最小的数

    目录 题目链接 解法1 调用sort 解法2 冒泡排序的扩展 题目链接 链接 其实这道题 大概看完就知道是一个排序的问题 无非就是数组中的元素以一个合适的位置排好序 这样从头加到尾 组成的整体数字最小 题目中也暗示你排序问题了 个人捉摸了一