首页 > 编程语言 >算法学习Day37单调递增的数字

算法学习Day37单调递增的数字

时间:2024-01-22 23:44:07浏览次数:57  
标签:int Day37 递增 flag 算法 strNum 单调 赋值

Day37单调递增的数字

By HQWQF 2024/01/22

笔记


738.单调递增的数字

给定一个非负整数 N,找出小于或等于 N 的最大的整数,同时这个整数需要满足其各个位数上的数字是单调递增。

(当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。)

示例 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。

然后我们得从后面向前遍历,因为从前向后的话,由于我们要修改strNum[i - 1],可能会破坏前面的单调性。

另外我们把没必要每次都将strNum[i]赋值9,而是记录最左边出现非单调递增的那个位,因为这个位往后的都是9就行。

class Solution {
public:
 int monotoneIncreasingDigits(int N) {
        string strNum = to_string(N);//int数组转字符串
        // flag用来标记赋值9从哪里开始
        // 设置为这个默认值,为了防止第二个for循环在flag没有被赋值的情况下执行
        int flag = strNum.size();
        for (int i = strNum.size() - 1; i > 0; i--) {
            if (strNum[i - 1] > strNum[i] ) {
                flag = i;
                strNum[i - 1]--;
            }
        }
        for (int i = flag; i < strNum.size(); i++) {
            strNum[i] = '9';
        }
        return stoi(strNum);//字符串转int数组
    }
};

标签:int,Day37,递增,flag,算法,strNum,单调,赋值
From: https://www.cnblogs.com/HQWQF/p/17981412

相关文章

  • 机器人的控制算法(传统控制算法、基于模型的控制算法、非人工智能算法) —— 自动控制算
    参考:https://careers.tencent.com/jobdesc.html?postId=1742828601499197440机器人算法:机器人算法在AI领域兴起之前其实就是指自动控制算法,但是自动控制算法只能解决简单场景环境下的控制问题,对于复杂场景下自动控制算法往往效果有限,而复杂场景下使用AI算法来进行控制会得到......
  • 算法基础_1
    title:(算法基础课)link:(https://www.acwing.com/)cover:(https://cdn.acwing.com/media/activity/surface/log.png)上课理解思路->下课理解背过代码模板->做3-5遍题目(循环AC)排序快速排序快速排序模板题例题分治:用一个数来分,不需要必须是中心数先分完再递归两边......
  • Johnson 全源最短路算法
    ​ Johnson全源最短路是一种允许带负权边的全源最短路算法。它的主要实现思路即为将原先带负权边的图转化成求一个无负权边的图的全源最短路。​ 我们定义一个新节点\(0\),其中\(0\)节点与其它各节点连接一条边权为\(0\)的边。令\(h_i\)为\(0\)节点到\(i\)节点的最短......
  • STL-算法
    STL-算法目录STL-算法查找统计算法统计查找二分查找排序和通用算法排序随机合并反转复制替换删除算法复制替换删除唯一互换生成和异变算法数值算法关系集合算法交并集实践操作Vector中去重参考资料STL的三大组件:容器(container)算法(algorithm)迭代器(iterator)。STL算法部分......
  • 基于项目的协同过滤推荐算法(Item-Based Collaborative Filtering Recommendation Alg
    前言协同过滤推荐系统,包括基于用户的、基于项目的息肉通过率等,今天我们读一篇基于项目的协同过滤算法的论文。今天读的论文为一篇名叫《基于项目的协同过滤推荐算法》(Item-BasedCollaborativeFilteringRecommendationAlgorithms)。摘要Recommendersystemsapplyknowledg......
  • 优化Elastic Load Balancing负载均衡算法的实战指南
    在AWS中,ElasticLoadBalancing(ELB)服务是实现负载均衡的关键组件,而TargetGroups则用于管理和路由传入的流量。本篇博文将深入介绍如何通过Boto3(AWSSDKforPython)和ELBv2API来优化TargetGroup的负载均衡算法,以提高系统性能。我们将实现将所有符合条件的TargetGroup的负载均衡......
  • 聚类算法笔记【零基础数模系列】
    聚类算法前言作为数模小白,看了很多讲解新概念新模型的文章,这些文章往往要么讲的很浅不讲原理只讲应用,让人知其然不知其所以然。要么讲的很深小白看不懂,同时总是忽略关键部分,经常性引入陌生概念让初学者疑惑,因此有了本文,任何能熟练掌握线性代数知识且逻辑思维能力尚可的人都可以......
  • C++U6-03-最短路算法4-floyd算法
    B站复习视频:1、https://www.bilibili.com/video/BV1Fj411d71S/?spm_id_from=333.999.0.02、https://www.bilibili.com/video/BV1RK4y1d7ct?p=1&vd_source=5c960e1ede940bc5cab8ed42c8bdc937学习目标 floyd算法Floyd算法是一种用于找到图中所有节点对之间最短路径的动态规划......
  • 文心一言 VS 讯飞星火 VS chatgpt (184)-- 算法导论13.5 1题
    一、用go语言,对于图14-1中的红黑树T,说明执行OS-SELECT(T.root,10)的过程。文心一言:在红黑树中,OS-SELECT是一个用于在树中查找特定键值的操作。给定一个红黑树的根节点和要查找的键值,该操作返回一个节点,该节点包含给定的键值,或者如果该键值不存在,则返回一个节点,该节点在最接近......
  • 基于MIMO通信系统的球形译码算法matlab性能仿真,对比PSK检测,SDR检测
    1.算法运行效果图预览 2.算法运行软件版本MATLAB2022A 3.算法理论概述      球形译码算法(SD)是一种基于多输入多输出(MIMO)通信系统的检测算法。与相移键控(PSK)和软件定义无线电(SDR)相比,它具有更高的频谱效率和可靠性,下面将详细介绍SD算法。       ......