贪心算法----最大数

今日题目:leetcode179------点击跳转题目

分析:

要把这些数组组成最大的数,首先我们把数字转化为字符串,根据自定义的排序规则把这些字符串字数排列,再用一个字符串接受这些字符串数字拼接成最大的字符串数字

排序规则:

对于两个字符串数字s1和s2,有两种拼接方式:s1+s2 或 s2+s1,如果前者更大,那么就让s1在s2的前面,如果后者更大,就让s2在s1的前面

代码:

class Solution {
public:static bool cmp(string s1, string s2){return s1 + s2 > s2 + s1;}string largestNumber(vector<int>& nums) {vector<string> v_str;for(auto x : nums) {string str = to_string(x);v_str.push_back(str);}sort(v_str.begin(),v_str.end(),cmp);string ans;for(auto& x : v_str){ans += x;}//特判:如果第一个就是0,说明后面的也都是0,只用输出一个0才符合数字特征if(ans[0] == '0') ans = "0";return ans;}
};

tips1:关于sort的自定义排序

bool cmp(T a,T b);
sort(左区间,右区间,cmp);

在自定义排序时,cmp函数的返回值用于判断两个元素是否需要交换顺序。如果cmp函数返回true,则表示两个元素a、b的顺序不变,不需要交换;如果cmp函数返回false,则表示两个元素a、b的顺序需要交换,sort函数会将它们交换位置。

我们只需根据想要的排序规则,来判断两个元素如果满足排序规则,就返回true,反之false

本题中,如果s1+s2 > s2+s1 ,则说明满足排序规则,返回true,故而我们可以直接返回这个表达式的bool值即可

tips2:为什么cmp函数要设置成静态函数?

在 C++ 中,sort函数需要一个普通的函数指针(或者可调用对象,比如 lambda 表达式、函数对象等),而不是类成员函数指针。

类成员函数(非静态)与普通函数有一个重要的区别:类成员函数隐式地传递了一个指向调用对象的指针(通常称为this指针)。因此,成员函数的签名与普通函数的签名不同,不能直接作为一个普通函数指针传递。

静态成员函数不依赖于特定对象,它们不需要this指针。因此,它们的签名与普通函数相同,可以作为普通函数指针传递。这就是为什么在这个例子中,cmp函数需要声明为静态成员函数的原因。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gradient发布支持100万token的Lllama3,上下文长度从8K扩展到1048K

前言 近日Gradient公司在Crusoe Energy公司的算力支持下&#xff0c;开发了一款基于Llama-3的大型语言模型。这款新模型在原Llama-3 8B的基础上&#xff0c;将上下文长度从8000 token大幅扩展到超过104万token。 这一创新性突破&#xff0c;展现了当前SOTA大语言模型在长上下…

while 习题

while 结构 习题 1.计算1到100所有整数和 2.提示用户输入一个小于100的整数&#xff0c;并计算从1到该数之间所有整数的和 3.求从1到100所有整数的偶数和、奇数和 echo -e \n 可以实现换行 4.用户输入密码&#xff0c;脚本判断密码是否正确&#xff0c;正确密码为123456&am…

章十二、数据库(1) —— 概述、MySQL数据库、SQL、DDL、DML、DQL、多表设计

为什么学习数据库&#xff1a; ● 实现数据持久化到本地&#xff1b; ● 使用完整的管理系统统一管理&#xff0c;可以实现结构化查询&#xff0c;方便管理&#xff1b; 一、 数据库概述 ● 数据库 数据库&#xff08;DataBase&#xff09;为了方便数据的 存储 和 管理 &…

01、vue+openlayers6实现自定义测量功能(提供源码)

首先先封装一些openlayers的工具函数&#xff0c;如下所示&#xff1a; import VectorSource from ol/source/Vector; import VectorLayer from ol/layer/Vector; import Style from ol/style/Style; import Fill from ol/style/Fill; import Stroke from ol/style/Stroke; im…

【Linux】项目自动化构建工具make/makefile

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解Linux中项目自动化构建工具make/makefile的相关内容。 如果看到最后…

单链表经典oj题(2)

前言 这次将要把剩下的oj题将以图解和自己的理解把它讲解完&#xff0c;希望对大家有所帮助&#xff0c;这次的讲解也是干货 第一题 21. 合并两个有序链表 - 力扣&#xff08;LeetCode&#xff09; ok这次就简单点&#xff0c;大家自己去看题目了 将两个升序链表合并为一个…

Ubuntu18.04--虚拟机配置Samba并从Windows登录

前言&#xff1a; 本文记录我自己在Windows上安装 Virtualbox &#xff0c;并在Virtualbox中安装 Ubuntu-18.04 虚拟机&#xff0c;在Ubuntu-18.04虚拟机里安装配置Smaba服务器&#xff0c;从 Windows 宿主系统上访问虚拟机共享samba目录的配置命令。 引用: N/A 正文 虚拟…

​​​【收录 Hello 算法】5.1 栈

目录 5.1 栈 5.1.1 栈的常用操作 5.1.2 栈的实现 1. 基于链表的实现 2. 基于数组的实现 5.1.3 两种实现对比 5.1.4 栈的典型应用 5.1 栈 栈&#xff08;stack&#xff09;是一种遵循先入后出逻辑的线性数据结构。 我们可以将栈类比为桌面上的一摞盘子…

Linux diff命令(比较两个文件或目录的内容差异)

文章目录 Linux diff 命令详解教程基本用法比较文件输出解释 递归比较&#xff08;-r&#xff09;示例代码 控制输出格式统一格式&#xff08;-u&#xff09;上下文格式&#xff08;-c&#xff09; 高级选项忽略所有空白差异&#xff08;-w&#xff09;仅报告文件是否不同 Linu…

SVN 合并到 Git 时有文件大于 100 M 被限制 Push

如果有文件大小大于 100M&#xff0c;GitHub 是会被限制推送到仓库中的&#xff0c;大概率情况会显示下面的错误&#xff1a; remote: Resolving deltas: 100% (3601/3601), done. remote: error: Trace: aea1f450da6f2ef7bfce457c715d0fbb9b0f6d428fdca80233aff34b601ff59b re…

RobbitMQ基本消息队列的消息发送过程

RabbitMQ: One broker to queue them all | RabbitMQ RabbitMQ官网 SpringAmqp的官方地址&#xff1a;Spring AMQP 代码示例:对着代码看应该能看明白 publisher:消息发送者的代码示例 package cn.itcast.mq.helloworld;import com.rabbitmq.client.Channel; import com.rabb…

线路和绕组中的波过程(一)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第一篇笔记。下一篇传送门。 当电路中的设备&#xff08;元件&#xff09;最大实际尺寸l大于人们所感兴趣的谐波波长 λ \lambda λ时&#xff0c;可以作为集中参数处理&#xff0c;否则就要当做分布参数处理。即&…