当前位置: 首页 > article >正文

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

1.题目解析

题目来源

测试用例 

2.算法原理 

3.实战代码

代码解析 

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

完全性

反对称性

传递性 


1.题目解析

题目来源

179.最大数——力扣

测试用例 

2.算法原理 

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

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

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

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

3.实战代码

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.贪心策略的合理性证明(离散数学——全序关系)

完全性

反对称性

传递性 


http://www.kler.cn/a/408381.html

相关文章:

  • RangeInt,开源一个有限范围计数器模块。c语言的。 可以用于单片机
  • Android 常用命令和工具解析之内存相关
  • 在 Vue 项目中使用 betterScroll 的详细教程及原理解析
  • leetcode刷题记录(四十二)——101. 对称二叉树
  • 相机网卡开启巨型帧和关闭节能模式方法
  • linux基本命令(1)
  • Python 虚拟环境使用指南
  • enumerate()
  • 【C++】类(五):构造函数再探
  • 【JavaEE初阶 — 网络原理】初识网络原理
  • 【教学类-18-05】20241118正方形手工纸(蒙德里安-风格派-红黄蓝黑白)
  • kafka进阶_3.消费消息
  • STM32F10x 定时器
  • Linux之SELinux与防火墙
  • Linux无sudo权限将zsh作为默认shell
  • BOM的详细讲解
  • 【卷积神经网络;深度学习;滑坡检测;遥感|论文解读1】滑坡检测特征增强框架——AMU-Net
  • 什么是 WPF 中的依赖属性?有什么作用?
  • 什么是Axios,有什么特点
  • 单机部署kubernetes环境下Overleaf-基于MicroK8s的Overleaf应用部署指南
  • windows vscode C++ 简明教程
  • oneplus6线刷、trwp、magisk(apatch)、LSPosed、Shamiko、Hide My Applist
  • 【计算机网络】计算机网络概述
  • 40分钟学 Go 语言高并发实战:高性能缓存组件开发
  • 前端HTML
  • 深度学习中的Mosaic数据增强