• 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”,如果使用模式的排序方式,就会发过来。曾经想到了桶排序,但是会陷入沉思,无法出来。最后看到了一个神奇的定义方式:

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

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

    于是代码跃然纸上:

    1. class Solution {
    2. static bool compare(const string& s1,const string& s2){
    3. string str1=s1+s2;
    4. string str2=s2+s1;
    5. return str1>str2;//自定义比较函数,返回大的字符串
    6. }
    7. public:
    8. string largestNumber(vector<int>& nums) {
    9. vector temp(nums.size());
    10. for(int i=0;isize();i++)
    11. {
    12. temp[i]=to_string(nums[i]);
    13. }
    14. //sort(temp.rbegin(), temp.rend());
    15. sort(temp.begin(),temp.end(),compare);
    16. string res;
    17. for(int i=0;isize();i++)
    18. {
    19. res+=temp[i];
    20. }
    21. string res2="";
    22. for(int i=0;isize();i++)
    23. {
    24. if(res[i]=='0' && res2=="")
    25. {
    26. continue;
    27. }
    28. else
    29. {
    30. res2+=res[i];
    31. }
    32. }
    33. return res2==""?"0":res2;
    34. }
    35. };

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

     

    执行结果:

    通过

    显示详情

    添加备注

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

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

    通过测试用例:230 / 230

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

  • 相关阅读:
    detectron2环境搭建及自定义coco数据集(voc转coco)训练
    物联网网关在工业行业的应用案例
    JVM虚拟机详解
    CTO说不建议我使用SELECT * ,这是为什么?
    方法研究在长安福特总装系统改进中的应用
    2022杭电多校第八场
    前端打包工具的发展历程、思路(grunt,gulp,webpack,vite)
    JSP概述
    基于空间金字塔网络的光流估计
    HCIP第十六天笔记
  • 原文地址:https://blog.csdn.net/weixin_41579872/article/details/127433125