• 单调递增的数字-贪心


    package Leetcode;
    /**
     * 给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。
    (当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)
     */
    /**
     * 注意到如果减小 str[i]str[i] 以后不满足 str[i-1] <= str[i]str[i−1]<=str[i],那么肯定有 str[i-1] == str[i]str[i−1]==str[i],此时就需要再 str[i-1] - 1str[i−1]−1,递归地会处理到某个位置 idxidx,我们发现 str[idx] == str[idx + 1] == ... = str[i]str[idx]==str[idx+1]==...=str[i] 。然后只要str[idx] - 1str[idx]−1,然后后面都补上 99 即可。
    所以代码写起来很简单了。遍历各位数字的时候,求当前最大的数字 max。然后只在 max < arr[i]max<arr[i] 的时候才更新 max 对应的 idx(写法类似于查找数组中最大的元素,返回最小的下标)。接着判断是否有 arr[i] > arr[i + 1]arr[i]>arr[i+1],如果是,那么 idx 位置数字减 11,后面的位置全部置 99 即可。
     */
    public class dizengshuzi {
        public static void main(String[] args) {
            int N=332;
            System.out.println(monotoneIncreasingDigits(N));     
        }
        public static int monotoneIncreasingDigits(int N) {
            char []c=Integer.toString(N).toCharArray();
            int i=1;
            while(i<c.length&&c[i-1]<=c[i]){
                i+=1;
            }
            if(i<c.length){
                while(i>0&&c[i-1]>c[i]){
                    c[i-1]-=1;
                    i=i-1;
                }
                for(i+=1;i<c.length;i++){
                    c[i]='9';
                }
            }
            return Integer.parseInt(new String(c));
        }
        
    }
  • 相关阅读:
    cache buffers chains ,buffer busy waits
    关于I/O的一些脚本
    模拟buffer busy waits等待事件
    找出热点块所属的用户,对象名,类型
    找到引起磁盘排序的SQL
    db file parallel write,write complete waits
    free buffer waits
    检查日志文件是否传输到备用数据库
    模拟direct path read 等待事件
    3系统启动后的 wifi 加载过程
  • 原文地址:https://www.cnblogs.com/jieyi/p/14141295.html
Copyright © 2020-2023  润新知