LC 179. 最大数

这篇博客探讨了如何使用自定义排序规则对整数数组进行排序,该规则基于字符串连接后的比较。通过证明排序规则满足反对称性、传递性和完整性(全序关系的三个条件),确保了其可用性。代码示例中展示了如何实现这个排序规则,并在C++中进行应用,最后处理了0元素的特殊情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

思路
  • 自定义排序,自定义排序规则的合理性可以使用“全序关系”来证明(离散数学知识点)
  • 0的问题,除去相同元素0,见代码
代码
class Solution {
public:
    // 我们自定义一种排序规则
    // 该规则是否可以用来进行排序?使用“全序关系”进行证明后,满足3个条件,可用
    // 1.反对称性:如果 a ≤ b 且 b ≤ a 则 a = b (易证)
    // 2.传递性:如果 a ≤ b 且 b ≤ c 则 a ≤ c(有点复杂,略)
    // 3.完整性:a ≤ b 或 b ≤ a(任意2个元素是可以比较的 - 易证)
    static bool cmp(const string &s1, const string &s2) {
        return s1 + s2 > s2 + s1;
    }
    string largestNumber(vector<int>& nums) {
        int n = nums.size();
        vector<string> ns(n);
        for (int i = 0; i < n; i ++ ) ns[i] = to_string(nums[i]);
        sort(ns.begin(), ns.end(), cmp);
        string ans = "";
        for (int i = 0; i < n; i ++ ) ans += ns[i];
        if (ans[0] == '0') return "0";
        return ans;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水能zai舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值