179. 最大数(LeetCode)

news/2024/5/14 18:48:18

文章目录

  • 前言
  • 一、题目讲解
  • 二、算法原理
  • 三、代码编写
    • 1.仿函数写法
    • 2.lambda表达式
  • 四、验证
  • 五.总结


前言

在本篇文章中,我们将会带着大家采用贪心的方法解决LeetCode中最大数这道问题!!!

一、题目讲解

在这里插入图片描述

一组非负整数,包括0,要求把这些数合并起来,形成一个最大的整数。
我们具体来看看一下示例1:
两个整数,10,2。可以组成的情况有两种,102和210。
由于210大于102,所以我们返回210.

可能有很多数,拼接起来就非常大,超出整形的范围,所以要求我们最终按照字符串形式返回。

二、算法原理

本质:确定元素的先后顺序,谁在前,谁在后

我们首先来回顾一下我们之前学过的排序算法,我们以降序为例

两个数a和b:
🌟如果a>b,a在前,b在后
🌟如果a=b,a,b谁在前无所谓
🌟如果a<b,b在前,a在后

我们在来看一下本道题,也是一种排序规则,
两个数a和b:
🌟如果ab>ba,a在前,b在后
🌟如果ab=ba,a,b谁在前无所谓
🌟如果ab<ba,b在前,a在后
我们知道了这里,只需要把库里的排序函数按照我们的规则进行排序就可以实现了

贪心:谁比较好,把谁放在前面

三、代码编写

优化:把数转化成字符串,拼接字符串,比较字典序

我们可能遇到这种情况,nums[ ]={0,0,0};
最终我们拼接完成之后就是:“000”。

这时我们直接返回字符串0就可以。

1.仿函数写法

class Solution {
public://仿函数struct cmp{bool operator()(string&s1,string&s2){return s1+s2>s2+s1;}};string largestNumber(vector<int>& nums) {vector<string> v;//转化成字符串for(auto&e:nums){v.push_back(to_string(e));}//按照我们的升序规则进行排序//注意比较的cmp怎莫写sort(v.begin(),v.end(),cmp());//连接string str;for(auto&e:v){str+=e;}//特殊处理if(str[0]=='0'){return "0";}else {return str;}}
};

2.lambda表达式

class Solution {
public:string largestNumber(vector<int>& nums) {vector<string> v;//转化成字符串for(auto&e:nums){v.push_back(to_string(e));}//按照我们的升序规则进行排序//注意比较的cmp怎莫写sort(v.begin(),v.end(),[](string&s1,string&s2){return s1+s2>s2+s1;});//连接string str;for(auto&e:v){str+=e;}//特殊处理if(str[0]=='0'){return "0";}else {return str;}}
};

四、验证

我们从一堆数中任意选择两个元素,按照我们的规则,如果满足全序关系就可以排序。

首先介绍一下全序关系的三个性质
🌟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;

我们只要证明了我们的关系满足这三个性质,就可以进行排序
证明:
我们假设a有x位,b有y位
🌟1.完全性
在这里插入图片描述

🌟2.反对称性
在这里插入图片描述

🌟3.传递性
在这里插入图片描述

五.总结

以上就是今天要讲的内容,本文仅仅详细介绍了 最大数这道题的内容。希望对大家的学习有所帮助,仅供参考 如有错误请大佬指点我会尽快去改正 欢迎大家来评论~~ 😘 😘 😘


http://www.mrgr.cn/p/46775586

相关文章

iZotope RX 10 音频修复和增强工具 mac/win

iZotope RX 10 for Mac是一款出色的音频修复和增强工具&#xff0c;凭借其卓越的音频处理技术&#xff0c;能够轻松应对各种音频问题。 无论是背景噪音、回声还是失真&#xff0c;RX 10都能精准去除&#xff0c;还原清晰纯净的音频。同时&#xff0c;它还提供了丰富的增强工具&…

Linux的磁盘分区,格式化,挂载

1.需要提前添加几个磁盘&#xff0c;以做实验 2.把nvme0n2磁盘用来分区实验 3.分了一个主分区&#xff0c;和一个扩展分区&#xff08;扩展分区是不能使用的&#xff0c;所以又在扩展分区里分了一个逻辑分区&#xff09;分区的大小自己定义 4.格式化分出来的区&#xff0c;这…

abowman小宠物插件-博客园

首先进入abowmab右上角有很多宠物的选项(我选的是仓鼠)然后copy源码 <iframe width="400" height="300" frameborder="0" src="https://cdn.abowman.com/widgets/hamster/hamster.html?up_bgColor=ffffff&up_bodyColor=e6debe&…

AI大模型探索之路-训练篇3:大语言模型全景解读

文章目录 前言一、语言模型发展历程1. 第一阶段&#xff1a;统计语言模型&#xff08;Statistical Language Model, SLM&#xff09;2. 第二阶段&#xff1a;神经语言模型&#xff08;Neural Language Model, NLM&#xff09;3. 第三阶段&#xff1a;预训练语言模型&#xff08…

下载安装git

如何下载安装Git 一、去官网下载git git官网地址:https://git-scm.com/download 选择自己的系统下载PS:官网下载很慢,可以搜清华大学开源软件,选择适合自己的下载下载完成之后点击安装包安装二、开始安装配置 没啥好改的,一直点击“下一步”就好了选择安装的路径其他的一直…

日志分析-apache日志分析

简介 账号密码 root apacherizhi ssh root@IP 1、提交当天访问次数最多的IP,即黑客IP: 2、黑客使用的浏览器指纹是什么,提交指纹的md5: 3、查看index.php页面被访问的次数,提交次数: 4、查看黑客IP访问了多少次,提交次数: 5、查看2023年8月03日8时这一个小时内有多少IP…

jsp servlet 学生信息管理系统

一、角色划分 1、超级管理员 2、学生 二、模块展示 1、登录 2、列表页面【超级管理员展示所有用户信息、学生只展示当前登录用户信息】 3、新增 4、编辑 三、数据库【mysql】 四、运行演示 jsp servlet 学生信息管理系统

C语言操作符和关键字

文章目录 操作符单目操作符sizeof&#xff08;类型&#xff09;强制类型转换 关系操作符、逻辑操作符、条件操作符逗号表达式 常见关键字typedefstaticstatic修饰局部变量static修饰全局变量static修饰函数 register寄存器关键词define定义常量和宏 操作符 单目操作符 C语言中…

机器学习和深度学习-- 李宏毅(笔记与个人理解)Day22

Day 22 Transformer seqence to seqence 有什么用呢&#xff1f; Encoder how Block work 仔细讲讲Residual 的过程&#xff1f; 重构 Decoder - AutoRegressive Mask 由于是文字接龙&#xff0c;所以无法考虑右边的 info 另一种decoder Encoder to Decoder – Cross Attend…

[Vue warn]: Duplicate keys detected: item.id. This may cause an update error.

[Vue warn]: Duplicate keys detected: item.id. This may cause an update error.

vue之生命周期钩子

一、简单理解生命周期 Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们可以通过生命周期钩子函数,在特定的生命周期阶段执行特定的操作。二、常见的生命周期钩子 1. beforeCreate:实例创建之初,此…

网络通信安全

一、网络通信安全基础 TCP/IP协议简介 TCP/IP体系结构、以太网、Internet地址、端口 TCP/IP协议简介如下&#xff1a;&#xff08;from文心一言&#xff09; TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/网际协议&#xff0…

29.基础乐理-C大调也会用到黑键?

C大调也会运用到黑键&#xff1f;这个问题是在问&#xff0c;在一首注明为 某某大调 的音乐中&#xff0c;能够出现 某某大调 音阶中没有出现的音吗&#xff1f;比如C大调的音阶是 CDEFGAB&#xff0c;那C大调里 可以出现 升C、升D之类的音吗&#xff1f;再比如 D大调&#xff…

云服务器部署lucky配合frp实现域名访问本地Docker容器

云服务器部署lucky配合frp实现域名访问DX4600 FRP内网穿透可以看我这个帖子:https://www.cnblogs.com/snbg/p/18040720 操作流程(配置流程) 1.购买一个域名和服务器 2.配置云服务器 3.部署lucky实现域名访问 操作步骤(配置步骤) 一、购买一个域名和服务器 1.购买一个域名 …

应用实战 | 别踩白块小游戏,邀请大家来PK挑战~

“踩白块会输”是一个简单的微信小程序游戏&#xff0c;灵感来自当年火热的别踩白块游戏&#xff0c;程序内分成三个模块&#xff1a;手残模式、经典模式和极速模式&#xff0c;分别对应由易到难的三种玩法&#xff0c;可以查看游戏排名。动画效果采用JS实现&#xff0c;小程序…

springboot3整合redis

redis在我们的日常开发中是必不可少的&#xff0c;本次来介绍使用spring boot整合redis实现一些基本的操作&#xff1b; 1、新建一个spring boot项目&#xff0c;并导入相应的依赖&#xff1b; <dependency><groupId>org.springframework.boot</groupId><…

【介绍下IDM的实用功能】

&#x1f3a5;博主&#xff1a;程序员不想YY啊 &#x1f4ab;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f917;点赞&#x1f388;收藏⭐再看&#x1f4ab;养成习惯 ✨希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出…

2024.4.28

有以下类&#xff0c;完成特殊成员函数 #include <iostream>using namespace std; class Person{string name;int* age; public:Person():name("zhangsan"),age(new int(18)){}Person(string name,int* age):name(name),age(new int(*age)){}~Person(){delete…

21物联1班作业DES分组密码

DES加密 &#xff01;&#xff01;&#xff01;以下加密自己学号姓名 将密钥zw改为abcde 学号加密 密钥为zw 密钥为abcde DES解密 &#xff01;&#xff01;&#xff01;将desdecode中内容替换成DES加密密文。 学号解密 代码解释 加密代码 问我QQ上要 解密代码 问我QQ上…