【贪心算法-第三弹——Leetcode-179.最大数】

1.题目解析

题目来源

测试用例

2.算法原理

3.实战代码

代码解析

*4.贪心策略的合理性证明(离散数学------全序关系)

完全性

反对称性

传递性


1.题目解析

题目来源

|-----------------------------------------------------------------------------------|
| 179.最大数------力扣 |

测试用例

2.算法原理

I.由题目我们知道需要返回将数组的所以数字组合形成的一个最大的数字,所以我们可以将整数类型转化为字符串,这样便于运算

II.这里如果使用暴力解法就是从前到后将每个数字高位值更大的排到前面然后不断遍历组合字符串即可,但是这样时间复杂度会很大,不妨使用贪心的思路,这里"贪心"的思路是:

III.需要注意的是当数组中全部是0的情况,此时我们理想的返回值就是一个字符"0",但是如果不特殊处理上述逻辑就返回的是类似"00000"这样的情况,显然不行。所以我们在最后要判断字符串的首位元素是否为"0",是的话就直接返回一个字符"0"即可

小tips:为什么上面只需要判断第一个位置是否为字符"0"?因为由排序的底层逻辑可以知道当第一位都是字符"0"时就代表此时整个字符串必定全部为"0",所以只需要判断第一个即可

3.实战代码

cpp 复制代码
class Solution {
public:
    string largestNumber(vector<int>& nums) 
    {
        vector<string> str;
        for(auto e : nums)
        {
            str.push_back(to_string(e));
        }    

        //lamda表达式 
        //[](参数列表)
        //{函数体}
        sort(str.begin(),str.end(),[](const string s1,const string s2)
        {
            return s1 + s2 > s2 + s1;
        });

        string ret;
        for(auto& e : str)
        {
            ret += e;
        }
        return ret[0] == '0' ? "0" : ret;
    }
};

代码解析

*4.贪心策略的合理性证明(离散数学------全序关系)

完全性

反对称性

传递性

相关推荐
Xudde.几秒前
班级作业笔记报告0x08
笔记·学习·安全·web安全
Bczheng17 分钟前
五.serialize.h中的CDataStream类
算法·哈希算法
迷路爸爸1807 分钟前
Docker 入门学习笔记 05:卷到底是什么,为什么容器删了数据却还能保留
笔记·学习·docker
小O的算法实验室8 分钟前
2025年SEVC,考虑组件共享的装配混合流水车间批量流调度的多策略自适应差分进化算法,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
chools9 分钟前
Java后端拥抱AI开发之个人学习路线 - - Spring AI【第四期】(Tool + MCP)
java·人工智能·学习·spring
汀、人工智能11 分钟前
[特殊字符] 第36课:柱状图最大矩形
数据结构·算法·数据库架构·图论·bfs·柱状图最大矩形
List<String> error_P17 分钟前
蓝桥杯最后冲刺(三)
算法
世人万千丶23 分钟前
Flutter 框架跨平台鸿蒙开发 - 数独游戏应用开发文档
学习·flutter·游戏·华为·harmonyos·鸿蒙
xuhaoyu_cpp_java24 分钟前
Maven学习(一)
java·经验分享·笔记·学习·maven
样例过了就是过了28 分钟前
LeetCode热题100 跳跃游戏
c++·算法·leetcode·贪心算法·动态规划