代码随想录算法训练营Day37贪心算法:738.单调递增的数字,714. 买卖股票的最佳时机含手续费,968.监控二叉树

738.单调递增的数字

文章链接:代码随想录 (programmercarl.com)

思路:无思路

看完文章后的反思:(以98这个数为例)

(1)局部最优:遇到strNum[i - 1] > strNum[i]的情况,让strNum[i - 1]--,然后strNum[i]给为9,可以保证这两位变成最大单调递增整数

        全局最优:得到小于等于N的最大单调递增的整数

(2)遍历顺序,应当从后往前进行遍历,因为如果从前往后遍历的话,strNum[i-1]要是--了,可能就会比strNum[i-2]还要小,就不符合单调递增

(3)因此代码有两个层面,首先从后向前遍历,遇到strNum[i ] > strNum[i + 1]的情况,让strNum[i ]--;其次就是要将i之后的数全部变成9,让整个数组尽可能的大

学习到的知识:

(1)字符--,字符在进行数值运算时,会自动进行计算

(2)Integer.parseInt()方法

(3)String.valueOf()方法String.valueOf()方法的使用_Seven7707的博客-CSDN博客_string.valueof

Java代码:

class Solution {
    public int monotoneIncreasingDigits(int n) {
        String s = String.valueOf(n);
        char[] sc = s.toCharArray();
        int start = sc.length;//表示从第几个数开始变成9
        //以98为例子
        for(int i = sc.length - 2;i >= 0;i--){
            if(sc[i] > sc[i + 1]){
                sc[i]--;
                start = i + 1;
            }
        }
        //将start之后的字符都变成9
        for(int i = start; i < sc.length;i++){
            sc[i] = '9';
        }
        return Integer.parseInt(new String(sc));
    }
}

714. 买卖股票的最佳时机含手续费(一刷先跳过)

文章链接:代码随想录 (programmercarl.com)

968.监控二叉树(一刷先跳过)

文章链接:代码随想录 (programmercarl.com)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值