首页 > 编程语言 >【贪心算法-第三弹——Leetcode-179.最大数】

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

时间:2024-11-24 16:01:20浏览次数:10  
标签:题目 string 最大数 s1 ret 179 str Leetcode 贪心

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

完全性

反对称性

传递性 

标签:题目,string,最大数,s1,ret,179,str,Leetcode,贪心
From: https://blog.csdn.net/2301_80689220/article/details/144008026

相关文章

  • 代码随想录算法训练营第二十五天|LeetCode491.递增子序列、46.全排列、47.全排列II、3
    前言打卡代码随想录算法训练营第49期第二十五天  ○(^皿^)っHiahiahia…首先十分推荐学算法的同学可以先了解一下代码随想录,可以在B站卡哥B站账号、代码随想录官方网站代码随想录了解,卡哥清晰易懂的算法教学让我直接果断关注,也十分有缘和第49期的训练营大家庭一起进步。今......
  • LeetCode题解:29.两数相除【Python题解超详细,位运算、二分查找法、递归法】,知识拓展:位
    题目描述        给你两个整数,被除数 dividend 和除数 divisor。将两数相除,要求 不使用 乘法、除法和取余运算。整数除法应该向零截断,也就是截去(truncate)其小数部分。例如,8.345 将被截断为 8 ,-2.7335 将被截断至 -2 。返回被除数 dividend 除以除数 div......
  • LeetCode:1207.独一无二的出现次数——Java哈希表
    目录1.题目如下: 2.题目解析:3.暴力解法:4.复杂度分析:1.题目如下: 给你一个整数数组 arr,如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。示例1:输入:arr=[1,2,2,1,1,3]输出:true解释:在该数组中,1出现了3次,2出现了2次,3只出现了1次。没......
  • 【滑动窗口】变种题目:leetcode76:最小覆盖子串
    前言滑动窗口是算法的数组部分中非常重要的一个内容,关于滑动窗口的题目,我已经发布过相关的变种题目文章,链接如下,欢迎访问:【滑动窗口】相关题目分析讲解:leetcode209,leetcode904如果你不了解什么是滑动窗口,推荐观看代码随想录的基础讲解视频:拿下滑动窗口!|LeetCode......
  • Zlibrary最新镜像网址,全球最大数字图书馆已恢复
    zlibrary网站距离上次被美国执法机构端掉,已经过去了好几个月。近期Zlibrary的镜像站点终于恢复正常!无需任何工具,可直接访问。目前图书藏量已经达到了11948431本,我试着搜一些冷门小说也是可以搜到,真正的镜像网站!!zlibrary电脑客户端/安卓appzlibrary(windows/mac/安卓)客户端:ht......
  • LeetCode---JZ85 连续子数组的最大和(二)
    示例代码importjava.util.*;publicclassSolution{publicint[]FindGreatestSumOfSubArray(int[]array){//记录到下标i为止的最大连续子数组和的最大值int[]dp=newint[array.length];dp[0]=array[0];intmaxsum=......
  • leetcode每日一题:3181.执行操作可获得的最大总奖励 II
     题干:读本文前,请先弄懂上一篇中的内容,因为这是对上一篇内容的优化:3180.执行操作可获得的最大总奖励I明白上篇的,访问值的影响、复制、上下行之间的关系和算法后可继续看:上一篇中,我们用二维数组,第二维表示了状态空间。但是,在今日的题目中,提交不行,因为占用的空间太太太......
  • LeetCode|384. 打乱数组(day22)
    作者:MJ昊博客:掘金、CSDN等公众号:程序猿的编程之路今天是昊的算法之路第22天,今天分享的是LeetCode第384题打乱数组的解题思路。这是一道中等难度的题目,要求我们实现一个算法,使得数组支持随机打乱和重置为初始顺序的功能,并且每种排列出现的概率应当相等。题目描述简要......
  • LeetCode_70. 爬楼梯_java
    1、题目70.爬楼梯https://leetcode.cn/problems/climbing-stairs/假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬1或2个台阶。你有多少种不同的方法可以爬到楼顶呢?示例1:输入:n=2输出:2解释:有两种方法可以爬到楼顶。1.1阶+1阶2.2阶示例2:输......
  • 【每日一题】LeetCode - 最长回文子串
    在字符串相关的算法题中,寻找最长回文子串是一个经典且富有挑战性的题目。本篇将详细分析并推导两种有效的解决方案:动态规划法和中心扩展法。题目描述给定一个字符串s,我们需要找到s中最长的回文子串。回文是指正着读和反着读都相同的字符串。例如,输入"babad"时,输出可......