【代码随想录算法训练营Day37】738.单调递增的数字;总结

文章目录

  • ❇️Day 37 第八章 贪心算法 part06
    • ✴️今日任务
    • ❇️738.单调递增的数字
      • 自己的思路
      • 自己的代码(✅通过94.27%)
      • 随想录思路
      • 随想录代码
    • ☑️968.监控二叉树 (可以跳过)
    • 🈴总结

❇️Day 37 第八章 贪心算法 part06

✴️今日任务

  • 738.单调递增的数字
  • 总结

❇️738.单调递增的数字

  • 题目链接:https://leetcode.cn/problems/monotone-increasing-digits/
  • 视频讲解:https://www.bilibili.com/video/BV1Kv4y1x7tP
  • 文章链接:https://programmercarl.com/0738.%E5%8D%95%E8%B0%83%E9%80%92%E5%A2%9E%E7%9A%84%E6%95%B0%E5%AD%97.html

自己的思路

  1. 先把数字转换成数组,利用一个Array数组
  2. 先从右往左遍历,找出从右往左单调递减最大的数
    1. 好像不太行
    2. eg:677440
    3. 会变成 333339
  3. 直接从左往右遍历,遇到后面小的数当前数-1,后面的数全变成9
  4. 再从当前数往前遍历,前面的数如果更大就把当前数变成9,前面的数-1

自己的代码(✅通过94.27%)

class Solution {public int monotoneIncreasingDigits(int n) {//如果是0,直接返回0,不然无法把n转换成数组if(n == 0) return 0;int res = 0;//把n转换成数组,利用栈使数组中数字顺序与n一样LinkedList<Integer> nums = new LinkedList<>();while(n != 0){nums.push(n % 10);n /= 10;}//System.out.println(nums);int[] nums1 = new int[nums.size()];nums1[nums.size() - 1] = nums.get(nums.size() - 1);for (int i = 0; i < nums.size() - 1; i++) {//System.out.println("i"+i+" nums[i]:"+nums.get(i)+" nums[i + 1]:"+nums.get(i + 1));//如果后一位更小if(nums.get(i + 1) < nums.get(i)){//当前位-1nums1[i] = nums.get(i) - 1;//后面都改为9for (int j = i + 1; j < nums1.length; j++) {nums1[j] = 9;}//System.out.println("*"+Arrays.toString(nums1));//再往前遍历,前面的数若大于当前数,当前数改为9,前面的数-1int x = i;while(x > 0){if(nums1[x] < nums1[x - 1]){nums1[x] = 9;nums1[x - 1] --;}x --;}break;}else{nums1[i] = nums.get(i);}}//System.out.println(Arrays.toString(nums1));//把最终的数组再转换成数int num = 1;for (int i = nums1.length - 1; i >= 0; i --) {res += nums1[i] * num;num *= 10;}return res;}
}

随想录思路

  1. 直接用字符串而不是数组

随想录代码

class Solution {public int monotoneIncreasingDigits(int n) {String s = String.valueOf(n);char[] chars = s.toCharArray();int start = s.length();for (int i = s.length() - 2; i >= 0; i--) {if (chars[i] > chars[i + 1]) {chars[i]--;start = i+1;}}for (int i = start; i < s.length(); i++) {chars[i] = '9';}return Integer.parseInt(String.valueOf(chars));}
}

☑️968.监控二叉树 (可以跳过)

  • 本题是贪心和二叉树的一个结合,比较难,一刷大家就跳过吧。
  • 题目链接:https://leetcode.cn/problems/binary-tree-cameras/
  • 视频讲解:https://www.bilibili.com/video/BV1SA411U75i
  • 文章链接:https://programmercarl.com/0968.%E7%9B%91%E6%8E%A7%E4%BA%8C%E5%8F%89%E6%A0%91.html

🈴总结

  • 可以看看贪心算法的总结,贪心本来就没啥规律,能写出个总结篇真的不容易了。
  • 文章链接:https://programmercarl.com/%E8%B4%AA%E5%BF%83%E7%AE%97%E6%B3%95%E6%80%BB%E7%BB%93%E7%AF%87.html
  • 符号:
    • 思路
      • 🟢自己的思路和随想录一样
      • 🟡自己有思路但随想录思路更好
      • 🔴自己毫无思路
    • 代码
      • 🟩自己写出来且和随想录一样
      • 🟨通过但还有其他方法
      • 🟥写不出来or没写

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/722741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sentinel docker 基础配置学习

1&#xff1a;去官网下载 Releases alibaba/Sentinel GitHub 2&#xff1a;保存到linux 3&#xff1a;编写dockerfile FROM openjdk:8-jreLABEL authors"xxx" #第二步创建一个文件夹Z RUN mkdir /app #第三步复制jar 到app 下 COPY xxxxxx-1.8.7.jar /app/#第四…

ArcGIS学习(十三)多源数据下的城市街道功能评估

ArcGIS学习(十三)多源数据下的城市街道功能评估 本任务带来的内容是多元数据下的城市街道功能评估。本任务包括两个关卡: 城市街道空间中观解读 城市街道功能详细评价 首先,我们来看看本任务的分析思路。 1.城市街道空间中观解读 下面我们正式进入第一关的内容一- 城市…

Java Day2 面向对象

这里写目录标题 1、static总结1.1 代码块1.1.1 静态代码块1.1.2 实例代码块1.1.3 小例子 2、继承2.1 权限修饰符2.2 方法重写2.3 子类访问成员特点2.4子类构造器的特点 3、多态4、final、常量4.1 final4.2 常量 5 抽象类5.1 概念5.2 模板设计方法 6、接口6.1 接口新方法6.2 接口…

004-深拷贝浅拷贝

深拷贝&浅拷贝 1、值类型 & 引用类型2、概念3、深拷贝3.1 递归遍历3.2 JSON.parse(JSON.stringify())3.3 $.extend3.4 _.cloneDeep 4、浅拷贝4.1 扩展运算符4.2 Object.assign 1、值类型 & 引用类型 值类型&#xff1a;简单数据类型&#xff0c;基本数据类型&…

msg:xxl-rpc remoting error(connect timed out), for url :

使用xxl定时任务时报错。msg&#xff1a;xxl-rpc remoting error(connect timed out), for url : 最开始找不到解决办法&#xff0c;将以下所有的ipv4地址都试了一遍&#xff0c; 包括ping不通的&#xff0c;也将本机的防火墙关闭处理最后ping通了&#xff0c;但还是无法解决。…

浅谈马尔科夫链蒙特卡罗方法(MCMC)算法的理解

1.解决的问题 计算机怎么在任意给定的概率分布P上采样&#xff1f;首先可以想到把它拆成两步&#xff1a; &#xff08;1&#xff09;首先等概率的从采样区间里取一个待定样本x&#xff0c;并得到它的概率为p(x) &#xff08;2&#xff09;然后在均匀分布U[0,1]上取一个值&a…

媒体邀约服务主要有哪些工作

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体邀约服务是一项繁琐的沟通工作&#xff0c;下面介绍一下51媒体网的主要工作流程。‘ 明确需求&#xff1a;根据客户的传播需求&#xff0c;制定拟邀请媒体名单供客户筛选。 媒体筛选…

RNN循环神经网络及其梯度消失笔记

资料来源 【重温系列】RNN循环神经网络及其梯度消失 手把手公式推导大白话讲解 带时间序列的任务场景 标准神经网络建模的弊端 RNN循环神经网络 网络结构 多输入&#xff0c;多输出 这里的就是对应识别人名的任务&#xff0c;输入就是这里的x1,x2,输出的自然就是0或1了 这种…

针对有容量的电动汽车路由问题的灵活交叉的修正遗传算法

英文&#xff1a;Modified Genetic Algorithm with Flexible Crossover for The Capacitated Electric Vehicle Routing Problem 摘要 本文提出了一种对遗传算法的修改&#xff0c;用一种叫做灵活交叉操作的新技术来解决有容量的电动汽车路由问题&#xff08;CEVRP&#xff0…

二百二十七、Linux——通过shell脚本判断HDFS文件是否存在,如果存在则删除HDFS文件

一、目的 在用脚本去实现对HDFS中过期的ODS层原始数据进行删除后&#xff0c;发现还需要在脚本中对HDFS文件是否存在进行判断&#xff0c;否则如果HDFS文件不存在那么任务执行就会报错 报错原因是这一天的HDFS文件并不存在 原有脚本 #! /bin/bash source /etc/profile nowda…

python爬虫之Appium 的使用

Appium 是一个跨平台移动端自动化测试工具&#xff0c;可以非常便捷地为 iOS 和 Android 平台创建自动化测试用例。它可以模拟 App 内部的各种操作&#xff0c;如点击、滑动、文本输入等&#xff0c;只要我们手工操作的动作 Appium 都可以完成。在前面我们了解过 Selenium&…

使用 Docker 设置 PySpark Notebook

使用 Docker 设置 PySpark Notebook 第 1 步&#xff1a;拉取 Docker 镜像 首先拉取jupyter/all-spark-notebook包含 Spark 3.5.0 的镜像。 docker pull jupyter/all-spark-notebook:spark-3.5.0 第 2 步&#xff1a;设置您的工作区 在运行 Docker 映像之前&#xff0c;我们…

开源大数据集群部署(十四)Ranger集成Hbase

作者&#xff1a;櫰木 在hd1.dtstack.com主机上执行 在hmaster和back master上进行安装和执行 解压ranger-2.3.0-hbase-plugin [roothd1.dtstack.com ranger-plugin]# cd /root/bigdata [roothd1.dtstack.com ranger-plugin]# tar -zvxf ranger-2.3.0-hbase-plugin -C /opt配…

Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用&#xff0c;可能添加脚本后要手动拖动&#xff0c;这样如果有大量的脚本拖动也是不小的工作量 实例 例如&#xff1a;我的脚本需要添加一个Bone的列表&#xff0c;一个个拖动很麻烦。 实现脚本 我们可以用这样的脚本来实现。 public…

Nginx 域名证书 Http 和 Https 详细配置

小伙伴们好&#xff0c;欢迎关注&#xff0c;一起学习&#xff0c;无限进步 项目开发完成后&#xff0c;将项目部署到服务器上时&#xff0c;为了保证安全性和加密通信&#xff0c;我们通常会配置 Nginx 作为反向代理服务器&#xff0c;并使用域名证书启用 HTTPS。下面将为你指…

小程序API能力集成指南——画布API汇总(一)

RJS Canvas Canvas Canvas 实例, 在 RJS 中可通过 getCanvasById 获取。 属性 number width&#xff1a;画布宽度 number height&#xff1a;画布高度 方法 如下。 1、getContext Canvas.getContext(string contextType) RenderingContext Canvas.getContext(string c…

链表(Linked List)算法的使用场景和使用例子详解

链表&#xff08;Linked List&#xff09;是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含数据部分和指向下一个节点的指针。链表算法在软件开发程序中有着广泛的应用场景。 链表算法基础知识&#xff1a; 链表算法基础知识主要包括链表的基本概…

利用 Redis 和 Lua 实现高效的限流功能

简介 在现代系统中&#xff0c;限流是一种重要的机制&#xff0c;用于控制服务端的流量并保护系统免受恶意攻击或请求泛滥的影响。本文将介绍如何利用 Redis 和 Lua 结合实现高效的限流功能。 一、什么是限流 限流指的是对系统中的请求进行控制和调节&#xff0c;确保系统在…

window安装Miniconda的步骤

安装Miniconda是一个简单直接的过程&#xff0c;适合希望在Windows上进行Python开发而又不想安装Anaconda那样庞大软件包的用户。以下是详细的步骤&#xff1a; 第1步&#xff1a;下载Miniconda安装程序 打开你的网络浏览器&#xff0c;访问Miniconda的官方下载页面&#xff…

Cluade3干货:超越GPT,模型特点分析+使用教程|2024年3月更新

就在刚刚&#xff0c;Claude 发布了最新的大模型 Claude3&#xff0c;并且一次性发布了三个模型&#xff0c;分别是 Claude 3 Haiku&#xff1a;&#xff08;日本俳句 &#xff09;Claude 3 Sonnet&#xff08;英文十四行诗&#xff09;Claude 3 Opus&#xff08;古典乐作品集…