剑指Offer45.把数组排成最小的数 C++
1、题目描述
输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。
示例 1:
输入: [10,2]
输出: “102”
示例 2:
输入: [3,30,34,5,9]
输出: “3033459”
2、VS2019上运行
先转换成字符串再组合起来
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>using namespace std;class Solution {
public:// 将整数数组组合成最小的字符串string minNumber(vector<int>& nums) {vector<string> strs; // 存储转换后的字符串string ans; // 存储最终结果for (int i = 0; i < nums.size(); i++) {strs.push_back(to_string(nums[i])); // 将整数转换为字符串并添加到向量中}// 使用自定义的比较函数对字符串向量进行排序sort(strs.begin(), strs.end(), [](string& s1, string& s2) {return s1 + s2 < s2 + s1;});// 将排序后的字符串依次拼接到最终结果中for (int i = 0; i < strs.size(); i++) {ans += strs[i];}return ans; // 返回最小的组合数结果}
};int main() {Solution solution;vector<int> nums = { 3, 30, 34, 5, 9 }; // 示例输入string result = solution.minNumber(nums);cout << "Minimum Combination: " << result << endl; // 输出最小的组合数return 0;
}
Minimum Combination: 3033459
3、解题思路
- 1.定义了一个 Solution 类,其中的 minNumber 函数接收一个整数向量 nums 作为参数,并返回一个字符串。
- 2.在 minNumber 函数中,首先创建一个字符串向量 strs 用于存储将整数转换为字符串后的结果,以及一个空字符串 ans 用于存储最终的结果。
- 3.使用 for 循环遍历整数向量 nums,将每个整数转换为字符串,并将转换后的字符串添加到 strs 向量中。
- 4.使用自定义的比较函数作为参数传递给 sort 函数,对 strs 向量进行排序。该比较函数的逻辑是通过拼接两个字符串 s1 和 s2,并比较拼接后的结果 s1+s2 和 s2+s1 的大小,如果 s1+s2 小于 s2+s1,则 s1 排在 s2 前面。
- 5.排序完成后,通过 for 循环将排序后的字符串依次拼接到 ans 字符串中。
- 6.最终将 ans 字符串作为函数的返回结果,即为最小的组合字符串。
- 7.在主函数中,创建一个 Solution 类的对象 solution,并示例化一个整数向量 nums。
- 8.调用 solution 的 minNumber 函数,并将结果赋给字符串 result。
- 9.通过 cout 输出最小的组合字符串。
- 该算法的关键思路是将整数数组转换为字符串,然后利用自定义的比较函数对字符串进行排序,最后将排序后的字符串进行拼接得到最小的组合。这种比较函数的构造方法可以确保拼接得到的字符串是最小的。
4、Lambda 函数
- 在这里,Lambda 函数定义为 [](string& s1, string& s2) { return s1 + s2 < s2 + s1; },它接受两个字符串引用参数 s1 和 s2,并返回一个布尔值。
- Lambda 函数的逻辑是基于字符串的拼接形式来比较字符串的大小。它对 s1 和 s2 分别进行拼接,形成 s1 + s2 和 s2 + s1,然后比较两个拼接后的字符串大小。如果 s1 + s2 小于 s2 + s1,则认为 s1 小于 s2,返回 true;否则,返回 false。
- 这样,通过传递这个 Lambda 函数作为 sort 函数的比较函数参数,可以实现按照自定义规则对字符串向量进行排序。排序后,字符串向量中的字符串将按照组合后的最小值从小到大排列。
- 在 sort() 函数中使用 Lambda 函数时,不需要使用 -> 符号来指定返回类型。Lambda 表达式的返回类型可以由编译器进行自动推导,根据表达式的内容来推断返回类型。在这种情况下,由于 sort() 函数需要使用的比较函数是一个布尔函数,返回类型为 bool,因此编译器可以推断出返回类型为 bool,无需显式指定。
4、sort函数
- sort() 函数是 C++ 标准库中的一个算法函数,用于对容器中的元素进行排序。它按升序(默认)或按通过比较函数指定的排序规则对元素进行排列。
- sort() 函数的基本语法为:
template<class RandomIt>
void sort(RandomIt first, RandomIt last);template<class RandomIt, class Compare>
void sort(RandomIt first, RandomIt last, Compare comp);
- 其中,first 和 last 是表示要排序的元素范围的迭代器,指定了排序范围的首尾位置。comp 是一个可选的比较函数,用于指定元素的排序规则。如果未提供比较函数,则默认使用 < 运算符进行元素的比较。sort() 函数采用的排序算法是快速排序(QuickSort)或其变种。
相关文章:
剑指Offer45.把数组排成最小的数 C++
1、题目描述 输入一个非负整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。 示例 1: 输入: [10,2] 输出: “102” 示例 2: 输入: [3,30,34,5,9] 输出: “3033459” 2、VS2019上运行 先转换成字符串再组合起来 #in…...
【java毕业设计】基于SSM+MySql的人才公寓管理系统设计与实现(程序源码)--人才公寓管理系统
基于SSMMySql的人才公寓管理系统设计与实现(程序源码毕业论文) 大家好,今天给大家介绍基于SSMMySql的人才公寓管理系统设计与实现,本论文只截取部分文章重点,文章末尾附有本毕业设计完整源码及论文的获取方式。更多毕业…...
golang操作excel的高性能库——excelize/v2
目录 介绍文档与源码安装快速开始创建 Excel 文档读取 Excel 文档打开数据流流式写入 [相关 Excel 开源类库性能对比](https://xuri.me/excelize/zh-hans/performance.html) 介绍 Excelize是一个纯Go编写的库,提供了一组功能,允许你向XLAM / XLSM / XLS…...
学习51单片机怎么开始?
学习的过程不总是先打好基础,然后再盖上层建筑,尤其是实践性的、工程性很强的东西。如果你一定要先全面打好基础,再学习单片机,我觉得你一定学不好,因为你的基础永远打不好,因为基础太庞大了,基…...
[.NET学习笔记] -.NET6.0项目动态加载netstandard2.0报错但项目添加引用则正常的问题
问题描述 .NET6.0的项目使用netstandard2.0版本的动态链接库。若是在项目中直接添加引用,应用netstandard2.0项目或者netstandard2.0编译后的dll均能正常工作。但如果通过xcopy等方式,额外将对应的dll复制到执行目录,会执行失败。调用方式一…...
山景DSP芯片可烧录AP8224C2音频处理器方案
AP8224C2高性能32位音频应用处理器AP82系列音频处理器是面向音频应用领域设计的新一代SoC平台产品,适用于传统音响系统、新兴的蓝牙或Wifi 无线音频产品、Sound Bar 和调音台等市场。该处理器在总体架构和系统组成上,充分考虑了音频领域的特点࿰…...
来聊聊托管服务提供商(MSP)安全
纵观各个中小型企业,由于预算十分有限而且系统环境的满载,如今它们往往需要依赖托管服务提供商(managed service providers,MSP)来支持其IT服务与流程。而由于MSP提供的解决方案可以与客户端基础设施相集成,…...
最新版本的Anaconda环境配置、Cuda、cuDNN以及pytorch环境一键式配置流程
本教程是最新的深度学习入门环境配置教程,跟着本教程可以帮你解决入门深度学习之前的环境配置问题。同时,本教程拒绝琐碎,大部分以图例形式进行教程。这里我们安装的都是最新版本~ 文章目录 一、Anaconda的安装1.1 下载1.2 安装1.3 环境配置…...
【数据结构与算法】十大经典排序算法-选择排序
🌟个人博客:www.hellocode.top 🏰Java知识导航:Java-Navigate 🔥CSDN:HelloCode. 🌞知乎:HelloCode 🌴掘金:HelloCode ⚡如有问题,欢迎指正&#…...
【Spring专题】Spring之Bean的生命周期源码解析——阶段一(扫描生成BeanDefinition)
目录 前言阅读准备阅读指引阅读建议 课程内容一、生成BeanDefinition1.1 简单回顾*1.2 概念回顾1.3 核心方法讲解 二、方法讲解2.1 ClassPathBeanDefinitionScanner#scan2.2 ClassPathBeanDefinitionScanner#doScan2.3 ClassPathScanningCandidateComponentProvider#findCandid…...
【C#】判断打印机共享状态
打印机共享状态 /// <summary>/// 打印机共享状态/// </summary>public enum PrinterShareState{/// <summary>/// 无打印机/// </summary>None -1,/// <summary>/// 未共享/// </summary>NotShare 0,/// <summary>/// 已共享/// …...
运维监控学习笔记7
Zabbix的安装: 1、基础环境准备: 安装zabbix的yum源,阿里的yum源提供了zabbix3.0。 rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm 这个文件就是生成了一个zabbix.repo 2、安…...
【业务功能篇64】maven加速 配置settings.xml文件 镜像
maven加速 添加阿里镜像仓 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additi…...
Spring Boot(六十四):SpringBoot集成Gzip压缩数据
1 实现思路 2 实现 2.1 创建springboot项目 2.2 编写一个接口,功能很简单就是传入一个Json对象并返回 package com.example.demo.controller;import com.example.demo.entity.Advertising; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframewo…...
Mac安装opencv后无法导入cv2的解决方法
前提条件:以下两个插件安装成功 pip install opencv-python pip install --user opencv-contrib-python 注:直接用pip install opencv-contrib-python如果报错,就加上“–user" 第一步: 设置–添加python解释器 第二步&am…...
【题解】按之字形顺序打印二叉树
按之字形顺序打印二叉树 题目链接:按之字形顺序打印二叉树 解题思路:层次遍历,借助队列 首先解决如何模仿之字形的问题,我们为此设置一个flag,每到一层就修改flag,如果flag为true(初始为fals…...
后端人员如何快速上手vue
一、环境搭建 了解更多vue-cli 官网地址:https://cli.vuejs.org/zh/guide/browser-compatibility.html 前提 1.安装node(js代码的运行环境)、npm、cnpm/yarn; nodejs官网:https://nodejs.org/en cnpm安装:https://www.python100.com/htm…...
基于Prometheus监控Kubernetes集群
目录 一、环境准备 1.1、主机初始化配置 1.2、部署docker环境 二、部署kubernetes集群 2.1、组件介绍 2.2、配置阿里云yum源 2.3、安装kubelet kubeadm kubectl 2.4、配置init-config.yaml 2.5、安装master节点 2.6、安装node节点 2.7、安装flannel、cni 2.8、部署测…...
【数据分析】pandas (三)
基本功能 在这里,我们将讨论pandas数据结构中常见的许多基本功能 让我们创建一些示例对象: index pd.date_range(“1/1/2000”, periods8) s pd.Series(np.random.randn(5), index[“a”, “b”, “c”, “d”, “e”]). df pd.DataFrame(np.random.…...
nvm命令
1. 常见命令 1. nvm -v //查看nvm版本 nvm --version :显示 nvm 版本 2. nvm list //显示版本列表 nvm list :显示已安装的版本(同 nvm list installednvm list installed:显示已安装的版本nvm list available:显示所有…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...
Leetcode 3577. Count the Number of Computer Unlocking Permutations
Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接:3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯,要想要能够将所有的电脑解锁&#x…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用
文章目录 问题现象问题原因解决办法 问题现象 macOS启动台(Launchpad)多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显,都是Google家的办公全家桶。这些应用并不是通过独立安装的…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
