代码随想录算法训练营第三十七天|738. 单调递增的数字、贪心算法的一点总结

代码随想录刷题2022.03.15(3)

贪心算法6

LeetCode题目

738. 单调递增的数字

解题思路

1.本题的一次遍历(贪心算法)思路:

1)局部最优:当前一位比后一位大时,将前一位减1,后一位变为9(其实,应该是把后面的所有数值都变为9);

2)全局最优:得到小于或等于 N 的最大的递增整数。

2.小tips:可以将整数转化为string(to_string),这样可以直接得到一个string容器进行操作,最后再把string转化为int(stoi)。

代码过程

/*class Solution {
public:
    int monotoneIncreasingDigits(int n) {
        vectorresult;
        while(n)
        {
            result.push_back(n%10);
            n=n/10;
        }
        int flag=0;
        for(int i=1;i0;i--)
        {
            if(strnum[i-1]>strnum[i]){
                strnum[i-1]--;
                flag=i;
            }
        }
        for(int i=flag;i

贪心算法的一点总结

贪心算法的核心:不同于暴力解法或回溯解法,贪心算法有非常明显的一次遍历解题的特点,通过对单体个例的局部最优的构造,最终得到全局最优。

贪心算法的三类较明显的问题:

1)直接根据局部最优进行一次遍历;

2)多维问题:要分开维度先后遍历;

3)区间拉压:分开区间重叠和区间不重叠两种情况,重叠区间着重于区间拉压,非重叠区间着重其他操作。

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