当前位置: 首页 > 知识库问答 >
问题:

leetcode的最大数字:有人能解释一下为什么这个方法有效吗?

上官凯歌
2023-03-14
class Solution {
public:
    string largestNumber(vector<int> &num) {
        vector<string> arr;
        for(auto i:num)
            arr.push_back(to_string(i));
        sort(begin(arr), end(arr), [](string &s1, string &s2){ return s1+s2>s2+s1; });
        string res;
        for(auto s:arr)
            res+=s;
        while(res[0]=='0' && res.length()>1)
            res.erase(0,1);
        return  res;
    }
};

我很困惑为什么这个方法有效…有人能给这个方法一个证明吗?

共有1个答案

燕璞
2023-03-14

首先要注意的是,你用向量的所有元素形成的每一个数都有相同的位数。这就是为什么我们可以对字符串使用词典排序。

所以我们可以用一种简单的方法来列出所有的posibile连接,然后从中选择最大的连接。

用于排序的字符串比较对于向量中的2个元素的特殊情况利用了上面提到的事实。因此,我们可以修改简单的实现,首先使用这个比较器搜索最大的to元素,将它们串联起来,然后用一个大小减小了1的向量重复(新串联的元素也包含在新向量中)。但话又说回来,我们会选择新连接的元素和剩余的最大元素继续。如果我们不选择新连接的元素,那么我们就不会选择向量中最大的两个元素。所以我们按照递减的顺序,把元素一个一个地挑出来。这就是排序首先应用的原因。

 类似资料:
  • 我是Hibernate和JPA的新手,我对这个注释有问题。有人能简单地解释一下这个注释到底在做什么吗?因为在这种情况下,文档对我来说很难理解。 编辑我明白什么是持久上下文,但在代码中,我有这样的例子: 我对@PerustenceContext做什么有问题。抱歉,也许我没有具体说明。

  • 它通常会打印“z”。为什么它不返回分段错误?因为我试图访问一个不应该存在的索引,因为strB的大小(索引数量)等于tam_strA,它等于3。 另外,做有什么不同/问题吗?

  • 日安, 我有一个问题,在我的代码中,一个声明在函数之外有一个错误。 谢谢

  • 我想写一个brainfuck口译员,但我错过了一些上下文或其他东西。应该被调用以处理“

  • 我这里有一些关于Java的练习问题。我们应该在不使用编译器的情况下确定答案。 参考以下方法: 调用product(6)时的输出是什么? D)48 E)70 根据答案,正确的输出是48。我真的不明白为什么这是真的。6不符合基本情况,所以转到else语句。那么,乘积(6-2)=乘积(4),乘积(2)得到乘积(0),乘积(2)得到乘积(0),得到6*4,4*2,2*0,0*0。但那是32,不是48?是不

  • 问题内容: 我只是在android上开始,而我的java很生锈。我不记得曾经见过像这样嵌套在另一个函数中的函数。有人可以向我确切解释final的作用,并解释为什么您要在另一个函数中嵌套这样的功能吗? 问题答案: 这是一个匿名类。实际发生的情况是正在使用重写的函数创建 的子类。 关于匿名类的最优雅的事情之一是,它们使您可以在需要的地方准确定义单发类。此外,匿名类具有简洁的语法,可减少代码中的混乱情况