lettcode179.最大数

news2024/11/23 23:42:56

问题描述:

给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。

注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。

示例一:

输入nums = [10,2]
输出:"210"

示例二:

输入nums = [3,30,34,5,9]
输出:"9534330"

 问题解决:

这道题其实是一个自己指定排序规则的排序,而排序的过程就是贪心算法的体现,排序规则如下:

我们这里一数组里有两个数为例,分别是a和b

(1)ab  > ba(这里的ab是将数据b添加到数据a的前面) ——> a在前,b在后  

(2)ab = ba ——> 无所谓

(3)ab < ba——>b在前,a在后

其实这些比较就是贪心策略的体现。

那么这一个排序规则,为这么可以正确排序呢?

证明排序规则的排序是正确的:

证明方法:全序关系

什么事全序关系?

1.完全性:

设有两个元素a和b,一定要保证这两个元素是可以比大小的,

例如:a <= b 或者 a >= b

2.反对称性:

设有a,b两个元素,满足:

a <= b && a >= b ——> a = b

对应到本题中就是:

a在前 && b在后 ——>无所谓

3.传递性:

设有三个元素a,b,c,其满足:

a >= b && b>= c ——> a >= c

这个事最重要也是最难证明的一个。

接下来来使证明:

1.证明完全性:
2.证明反对称性:

3.证明传递性:

所以满足全序关系,说明我们规定的排序是正确的。

最后,题目要求输出的是字符串,所以有一个优化是可以在开始就将数组中的数字全部转化成字符

串,同时这样也有利于排序的比较,不用将整形数字拆分来比较,直接比较即可。

接下来就是代码的编写:

class Solution 
{
public:
    string largestNumber(vector<int>& nums) 
    {
        //优化:将所有的数转换成字符串
        vector<string> strs;
        for(int x :nums)
        {
            strs.push_back(to_string(x));
        }

        //排序:
        sort(strs.begin(),strs.end(),[](const string& s1,const string& s2)
        {
            return s1 + s2 > s2 + s1;
        });

        //提取结果;
        string ret;
        for(auto& s: strs)
        {
            ret += s;
        }
        if(ret[0] == '0')
        {
            return "0";
        }
        return ret;
    }
};

这就是这到题的详细解析。 

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

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

相关文章

数字时代安全风险防范与保密科技创新

文章目录 前言一、新技术应用带来的保密挑战1.1 通过技术手段获取国家秘密和重要情报日益普遍1.2 新型信息技术存在的风险不容忽视 二、加强保密科技创新的必要性2.1 提高定密准确性2.2 及时变更密级或解密2.3 对失泄密事故案件进行自动高效的预警和初步处理 三、保密科技创新中…

文档加密软件最强推荐 8款最好的文件加密软件

文档加密软件最强推荐 8款最好的文件加密软件 加密软件的选择通常取决于具体的应用场景、加密需求以及对安全性的要求。以下是比较市场上一些知名加密软件的特点与优势&#xff0c;帮助您判断哪家更适合您的需求&#xff1a; 1.安企神 点击免费试用安企神 优势&#xff1a; …

书生·浦语大模型第二期实战营(4)笔记

Finetune 为什么要微调 适应下游任务 两种微调范式 上面的是增量训练 下面的是指令微调 数据格式 微调方案 lora&#xff1a; 在基座模型的基础上再套用一个小模型 XTuner 简介 快速上手 LnternLM2 1.8B 多模态LLM

五款3dmax常用插件推荐(含云渲染工具)

在三维建模和动画设计领域&#xff0c;3ds Max软件因其强大功能和灵活性而广受欢迎。为了进一步提升工作效率和创作质量&#xff0c;有许多插件可供选择。本文推荐五款常用3ds Max插件&#xff0c;帮助你更好实现复杂的模型和动效创作。 五款3dmax常用插件推荐 1、Kitchen Cab…

2024妈妈杯数学建模思路A题思路汇总分析 MathorCup建模思路分享

C题&#xff1a;移动通信网络中PCI规划问题 &#xff08;完整版内容放在文末了&#xff09; 2024MathorCup A题完整思路完整数据可执行代码后续高质量成品论文 l 难度评分: 3.5/5 l 开放度评分: 3/5 l 适合专业: 通信工程、计算机科学、电子工程 l 主要算法: 图论算法、…

JavaEE初阶Day 13:多线程(11)

目录 Day 13&#xff1a;多线程&#xff08;11&#xff09;常见的锁策略1. 悲观锁 vs 乐观锁2. 重量级锁 vs 轻量级锁3. 自旋锁 vs 挂起等待锁4. 可重入锁 vs 不可重入锁5. 公平锁 vs 非公平锁6. 互斥锁 vs 读写锁 synchronized实现原理1. 锁升级2. 锁消除3. 锁粗化 CAS Day 13…

CANfestival 主机进入预操作态(preOperational)自动发送复位节点指令。

核心是iam_a_slave ,这个是字典生产的时候自动生成的。

xftp、xshell连不上虚拟机解决方法

一、检查连接虚拟机ip看是否正确 查看虚拟机系统 IP ifconfig 二、检查虚拟机防火墙是否关闭 查看防火墙状态(ubuntu) sudo ufw status 关闭防火墙 sudo ufw disable 查看防火墙状态(centos) systemctl status firewalld.service 关闭防火墙 systemctl stop firewalld.se…

vscode按ctrl+鼠标左键没反应

vscode按ctrl鼠标左键没反应 问题问题解决 问题 新买的阿里云服务器,在连接vscode后,按ctrl鼠标左键没反应,怎么办? 问题解决 你没有在vscode上安装c的相关插件,安装之后才可以实现按ctrl鼠标左键跳转到函数的定义

FTP客户端Transmit 5 for Mac中文激活版

Transmit 5是一款功能强大的Mac FTP客户端软件&#xff0c;它由Panic公司开发&#xff0c;为用户提供简单、高效的文件传输体验。 Transmit 5 for Mac中文激活版下载 Transmit 5支持多种传输协议&#xff0c;如FTP、SFTP、WebDAV和Amazon S3等&#xff0c;满足用户不同的文件传…

学习笔记-数据结构-线性表(2024-04-17)

设计一个算法实现在单链表中删除值相同的多余节点的算法。 设计思想&#xff1a;双指针 变量说明&#xff1a; head - 参数变量&#xff0c;代表链表的头节点。在调用DelSameNum函数时&#xff0c;需要传递链表的头节点的地址给这个参数&#xff0c;从而允许函数对链表进行操作…

工业控制(ICS)---modbus

Modbus Modbus&#xff0c;市场占有率高、出题频率高,算是最常见的题目&#xff0c;因为这个协议也是工控领域最常见的协议之一&#xff0c;主要有三类 Modbus/RTU 从机地址1B功能码1B数据字段xBCRC值2B 最大长度256B&#xff0c;所以数据字段最大长度252B Modbus/ASCII …

精度优于3cm!用它做边坡应急地形测量,准!快!

为贯彻落实《广东省地质灾害防治“十四五”规划》&#xff0c;广州市开展地质灾害风险点及新增隐患点专业监测设备建设项目。广州市现存166处地质灾害隐患点全部纳入“一张图”管理&#xff0c;除部分正在开展工程治理的隐患点&#xff0c;全市有138处隐患点已部署专业监测设备…

uni-app HBuilderX通过easycom省略import自动导入自定义组件

快速尝试 自HBuilderX 2.5.5起支持easycom组件模式。更新HBuilderX即可尝试。 easycom默认已启用&#xff0c;并对项目下的components和uni_modules目录开启自动扫描&#xff0c;对符合下面路径和命名规则的组件自动导入。 components/组件名/组件名.vue uni_modules/组件名/…

如何使用WinSCP通过固定公网TCP地址实现远程连接内网设备传输文件

文章目录 1. 简介2. 软件下载安装&#xff1a;3. SSH链接服务器4. WinSCP使用公网TCP地址链接本地服务器5. WinSCP使用固定公网TCP地址访问服务器 1. 简介 ​ Winscp是一个支持SSH(Secure SHell)的可视化SCP(Secure Copy)文件传输软件&#xff0c;它的主要功能是在本地与远程计…

C++笔试强训day1

目录 1.数字统计 2.两个数组的交集 3.点击消除 1.数字统计 链接 题目非常简单&#xff0c;不做赘述&#xff1a;就是单纯利用循环逐个%2判断是否0 详细代码&#xff1a; #include <iostream> using namespace std; int main() {ios::sync_with_stdio(0);cin.tie(0);…

vue快速入门(二十九)echarts在vue中的使用

注释很详细&#xff0c;直接上代码 上一篇 新增内容 echarts.js的下载途径echarts的饼图示范 echarts.js&#xff0c;点击跳转&#xff0c;右键另存即可 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

「C++」掌握C++异步编程

&#x1f4bb;文章目录 &#x1f4c4;前言异步任务概念期待与承诺futurepromise异常处理 执行异步任务asyncpackaged_task &#x1f4d3;总结 &#x1f4c4;前言 异步任务是多线程编程的核心&#xff0c;若想学习多线程设计&#xff0c;深入了解这些基本概念是必不可少的。如果…

GPT-3.5和GPT-Plus的区别

GPT-3.5和GPT-Plus都是OpenAI开发的大型语言模型,但它们之间有一些区别: GPT-3.5就是大家熟知的ChatGPT GPT-Plus 是Open AI 的更强的AI模型GPT-4版本。两者区别是&#xff1a; 模型规模:GPT-Plus是GPT-3的一个更大版本,参数量更多。而GPT-3.5是GPT-3的一个优化版本,在参数量…

欧科云链:香港虚拟资产OTC合规在即,技术监管成市场规范关键

4月12日香港OTC发牌制度公众咨询结束后&#xff0c;欧科云链研究院在星岛日报发表专栏文章&#xff0c;分享对香港OTC市场的调研情况&#xff0c;并提出“技术监管是香港OTC及Web3生态走向规范的关键”。欧科云链研究院认为&#xff0c;随着OTC监管及虚拟资产现货ETF等事件向前…