【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)

代码随想录刷题60Day


目录

前言

单调递增数列

贪心算法总结 


前言

今天是贪心算法刷题的最后一天,今天本来是打算刷两道题,其中的一道hard题做了好久都没有做出来(主要思路错了)。然后再总结一下。


单调递增数列

【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)_第1张图片

   int monotoneIncreasingDigits(int n) 
    {
        if (n < 10)return n;
        vector num;
        int result = 0;
        int j = num.size() - 2, k;
        while (n)
        {
            num.push_back(n % 10);
            n /= 10;
        }
        for (j = num.size() - 2,k = j + 1; j >= 0; --j)
        {
            if (num[j] < num[k])
            {
                --num[k];
                break;
            }
            else if (num[j] > num[k])
                k = j;
        }
        if (j < 0) k = 0;
        for (int i = num.size() - 1; i >= 0; --i)
        {
            if (i >= k)
                result = result * 10 + num[i];
            else
                result = result * 10 + 9;
        }
        return result;
    }

未解决题

【算法日志】贪心算法刷题:单调递增数列,贪心算法总结(day32)_第2张图片

贪心算法总结 

贪心算法是一种常见的算法设计技术,用于在每个步骤中做出局部最优选择,以期望达到全局最优解。下面是对贪心算法的总结:

1. 基本思想:贪心算法每次都选择当前最优的解决方案,而不考虑未来的后果。它通过贪心选择策略,在每个步骤上做出局部最优选择,以期望达到全局最优解。

2. 常规步骤:

   · 确定问题的最优子结构。
   · 构建贪心选择策略,即每一步选择局部最优解。
   · 证明贪心选择的正确性。
   · 设计递归算法或迭代算法实现贪心选择策略。
   · 分析算法的时间复杂度和空间复杂度。

3. 优点:

   · 算法简单易实现。
   · 在某些问题上能够快速得到近似最优解。
   · 时间复杂度较低,通常为线性或近似线性时间。

4. 缺点:

   · 贪心选择策略可能会导致无法达到全局最优解。
   · 对于某些问题,贪心算法不一定能给出正确的解决方案。
   · 需要证明贪心选择的正确性,有时需要较高的数学推理能力。

总的来说,贪心算法是一种简单而有效的算法设计技术,适用于满足贪心选择性质和最优子结构性质的问题。它通过每一步的局部最优选择,期望达到全局最优解。然而,贪心算法并不适用于所有问题,有时需要综合考虑其他算法技术或进行适当的修改。


你可能感兴趣的:(算法,贪心算法,leetcode)