代码随想录算法训练营第三十七天 | 738.单调递增的数字 、968.监控二叉树 、贪心总结

学习目标

  • 完成贪心算法相关题目

学习内容

738. 单调递增的数字(Middle)

题目链接:738. 单调递增的数字

题目:当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。

示例 1:
输入: n = 10
输出: 9

示例 2:
输入: n = 1234
输出: 1234

示例 3:
输入: n = 332
输出: 299

思路:98,一旦出现strNum[i - 1] > strNum[i]的情况(非单调递增),首先想让strNum[i - 1]–,然后strNum[i]给为9,这样这个整数就是89,即小于98的最大的单调递增整数。
时间复杂度:O(n) 空间复杂度:O(n)

解决方案:

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] sarr = s.toCharArray();
        int start = sarr.length;
        for(int i = sarr.length - 2; i >= 0; i--) {
            if(sarr[i] > sarr[i+1]) {
                sarr[i] --;
                start = i + 1;
            }
        }

        for(int i = start; i < sarr.length; i ++) {
            sarr[i] = '9';
        }

        return Integer.parseInt(String.valueOf(sarr));
    }
}

小结:无


968.监控二叉树(Middle)

题目链接:968.监控二叉树
暂时跳过


贪心总结

主要还是看Carl哥的贪心算法总结篇, 贪心算法比较灵活, 没有固定套路, 需要多久练习

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