力扣记录:贪心算法2中等(1)序列问题——376 摆动序列,738 单调递增的数字

本次题目

  • 376 摆动序列
  • 738 单调递增的数字

376 摆动序列

  • 局部最优:删除单调坡度上的节点(除去两端)。定义峰值个数即摆动序列长度,定义当前差值和上一差值进行对比,针对数组最左或最右,将峰值初始化为1。可动态规划。
class Solution {
    public int wiggleMaxLength(int[] nums) {
        //考虑特殊情况
        if(nums.length <= 1) return nums.length;
        //定义峰值个数即摆动序列长度
        //针对数组最左或最右,将峰值初始化为1
        int count = 1;
        //定义当前差值和上一差值进行对比
        int cur = 0;
        int pre = 0;
        //遍历数组
        for(int i = 1; i < nums.length; i++){
            cur = nums[i] - nums[i - 1];
            if((cur > 0 && pre <=0) || (cur < 0 && pre >=0)){
                count++;
                pre = cur;
            } 
        }
        //返回结果
        return count;
    }
}

738 单调递增的数字

  • 局部最优:如果当前数字对比上一位数字不是递增,则将上一位减1,然后当前位设为9。
  • 注意:将数字转为字符串String.valueOf()再转为字符数组toCharArray()方便遍历,最后再将字符数组转为字符串String.valueOf()再转为数字Integer.parseInt()。从后向前遍历,定义flag标记从哪里开始赋值9,只要前面的位减1,后面就全部赋值9。
class Solution {
    public int monotoneIncreasingDigits(int n) {
        //将数字转为字符串再转为字符数组方便遍历
        String s = String.valueOf(n);
        char[] s_arr = s.toCharArray();
        //从后向前遍历,定义flag标记从哪里开始赋值9
        //只要前面的位减1,后面就全部赋值9
        int flag = s_arr.length;
        for(int i = s_arr.length - 1; i >= 1; i--){
            //如果当前数字对比上一位数字不是递增,则将上一位减1,然后当前位设为9
            if(s_arr[i] < s_arr[i - 1]){
                s_arr[i - 1]--;
                flag = i;
            }
        }
        //后面就全部赋值9
        for(int j = flag; j < s_arr.length; j++) s_arr[j] = '9';
        //返回结果
        return Integer.parseInt(String.valueOf(s_arr));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值