IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> leetcode 179 自定义一个字符比较函数 -> 正文阅读

[数据结构与算法]leetcode 179 自定义一个字符比较函数

179. 最大数

难度中等1035收藏分享切换为英文接收动态反馈

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

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

示例 1:

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

示例?2:

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

提示:

  • 1 <= nums.length <= 100
  • 0 <= nums[i] <= 109

通过次数179,007提交次数434,715

题解:这种题目属于用瞪眼题目,也就是一看就知道怎么实现可以最优,但是写程序往往不是很好实现。我的思路是先将数字转为字符串,然后就转为了字符串比较排序的问题,默认的sort函数提供两种方式来排序,从小到大,或者从大到小,这里就需要自己定义一个排序函数,总的方向是从大到小,但是大小如何判断呢,比如“9”和“987”,显然这道题目里面,应该是“9”大于“987”,如果使用模式的排序方式,就会发过来。曾经想到了桶排序,但是会陷入沉思,无法出来。最后看到了一个神奇的定义方式:

bool compare(const string& s1,const string& s2){
    string str1=s1+s2;
    string str2=s2+s1;
    return str1>str2;//自定义比较函数,返回大的字符串
}

看到这个豁然开朗,这正是我需要的大小判断方式。

于是代码跃然纸上:

class Solution {
    static bool compare(const string& s1,const string& s2){
    string str1=s1+s2;
    string str2=s2+s1;
    return str1>str2;//自定义比较函数,返回大的字符串
    }
public:
    string largestNumber(vector<int>& nums) {
        vector<string> temp(nums.size());
        for(int i=0;i<nums.size();i++)
        {
            temp[i]=to_string(nums[i]);
        }
        //sort(temp.rbegin(), temp.rend());
        sort(temp.begin(),temp.end(),compare);
        string res;
        for(int i=0;i<temp.size();i++)
        {
            res+=temp[i];
        }
        string res2="";
        for(int i=0;i<res.size();i++)
        {
            if(res[i]=='0' && res2=="")
            {
                continue;
            }
            else
            {
                res2+=res[i];
            }
        }
        return res2==""?"0":res2;
    }
};

以上是正确写法:如果compare函数不加static声明,则会产生如下错误。

?

执行结果:

通过

显示详情

添加备注

执行用时:4 ms, 在所有?C++?提交中击败了90.91%的用户

内存消耗:11 MB, 在所有?C++?提交中击败了41.49%的用户

通过测试用例:230?/?230

还有遇到一个问题就是,测试用例为["0","0"]的情况,需要处理开头的0,所以代码里面出现了res2的结果返回。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-10-22 21:39:02  更:2022-10-22 21:41:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:30:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码