代码随想录算法训练营第36期DAY39

news2024/9/23 17:16:18

道心破碎的一天,继续加油吧,坚持努力。

DAY39

738单调递增的数字

  1. 暴力法:

没有想到用int i=n;i>0;i--来遍历。

  1. class Solution {
  2. private:
  3.     bool checknum(int num){
  4.         if(num<10return true;
  5.         while(num/10!=0){
  6.             int low=num%10;
  7.             num/=10;
  8.             if(num%10>low) return false;
  9.         }
  10.         return true;
  11.     }
  12. public:
  13.     //先试试暴力法。
  14.     int monotoneIncreasingDigits(int n) {
  15.         for(int i=n;i>0;i--){
  16.             if(checknum(i)) return i;
  17.         }
  18.         return 0;
  19.     }
  20. };

  1. 力扣优质题解--Sweetiee

自己写了一遍,写不出来。。。

整理一下题解的思路:

既然要尽可能的大,那么这个数从高位开始要尽可能地保持不变。我们要找到从高到低第一个满足str[i]>str[i+1]的位置,然后把str[i]-1,再把后面的位置都变成9即可。

但是由于减小了str[i]之后,可能不满足str[i-1]<=str[i]了,若发生了这种情况,一定是str[i-1]==str[i],此时就需要再str[i-1]-1,递归地会处理到某个位置idx,我们发现:str[idx]==str[idx+1]==...==str[i]。然后只要str[idx]-1,然后后面都补上9即可。

所以:遍历时候,求当前最大数字max,只在max<arr[i]的时候才更新max对应的idx(类似于:查找数组中最大的元素,返回最小的下标)。**接着判断是否有arr[i]>arr[i+1]**,如果是,那么idx位置数字减1,后面位置全部为9即可。

很多细节。也算是锻炼到了。加油。

  1. class Solution {
  2. public:
  3.     int monotoneIncreasingDigits(int n) {
  4.         int max=-1,idx=-1;
  5.         auto s=to_string(n);
  6.         //注意不要越界
  7.         for(int i=0;i<s.size()-1;i++){
  8.             if(max<s[i]){
  9.                 max=s[i];
  10.                 idx=i;
  11.             }
  12.             if(s[i]>s[i+1]){
  13.                 s[idx]-=1;
  14.                 for(int j=idx+1;j<s.size();j++) s[j]='9';
  15.                 break;
  16.             }
  17.         }
  18.         return stoi(s);
  19.     }
  20. };

  1. 代码随想录官方题解

这个贪心就稍微好想到,也容易理解和实现了:

思路:遇到非递增,就让大数减1,声明变量记录需要置为9的位置。为了利用局部信息,需要从后向前遍历。

  1. class Solution {
  2. public:
  3.     int monotoneIncreasingDigits(int n) {
  4.         auto s=to_string(n);
  5.         int flag=s.size();
  6.         for(int i=s.size()-1;i>0;i--){
  7.             if(s[i-1]>s[i]){
  8.                 flag=i;
  9.                 s[i-1]--;
  10.             }
  11.         }
  12.         for(int i=flag;i<s.size();i++){
  13.             s[i]='9';
  14.         }
  15.         return stoi(s);
  16.     }
  17. };

除此之外,你还需要掌握函数名及手写它们:

  1. to_string()

  1. std::string my_to_string(int num){
  2.     bool isNegative=false;
  3.     std::string str;
  4.     if(num==0return "0";
  5.     if(num<0){
  6.         isNegative=true;
  7.         num*=-1;
  8.     }
  9.     while(num>0){
  10.         //不知道+'0'和减'0'有什么区别,还是写+吧。
  11.         str+=(num%10)+'0';
  12.         num/=10;
  13.     }
  14.     if(isNegative) str+='-';
  15.     reverse(str.begin(),str.end());
  16.     return str;
  17. }

  1. stroi()

  1. int my_stoi(std::string str){
  2.     int result=0;
  3.     bool isNegative=false;
  4.     int i=0;
  5.     if(str[0]=='-'){
  6.         isNegative=true;
  7.         i=1;
  8.     }
  9.     for(;i<str.size();i++){
  10.         if(str[i]<'0'||str[i]>'9'){
  11.             throw std::invalid_argument("Invalid input string");
  12.         }
  13.         //记住这句模版
  14.         result=result*10+(str[i]-'0');
  15.     }
  16.     if(isNegative) result*=-1;
  17.     return result;
  18. }

  1. stol

968监控二叉树,困难

看代码随想录题解过的:

  1. /**
  2.  * Definition for a binary tree node.
  3.  * struct TreeNode {
  4.  *     int val;
  5.  *     TreeNode *left;
  6.  *     TreeNode *right;
  7.  *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
  8.  *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  9.  *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  10.  * };
  11.  */
  12. class Solution {
  13. public:
  14.     int result=0;
  15.     int getres(TreeNode* root){
  16.         //递归终止逻辑
  17.         if(root==nullptrreturn 2;
  18.         int l=getres(root->left);
  19.         int r=getres(root->right);
  20.         if(l==2&&r==2return 0;
  21.         if(l==0||r==0){
  22.             result++;
  23.             return 1;
  24.         }
  25.         if(l==1||r==1){
  26.             return 2;
  27.         }
  28.         return -1;
  29.     }
  30.     int minCameraCover(TreeNode* root) {
  31.         if(getres(root)==0) result++;
  32.         return result;
  33.     }
  34. };

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

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

相关文章

详细分析Element Plus中的ElMessageBox弹窗用法(附Demo及模版)

目录 前言1. 基本知识2. Demo3. 实战4. 模版 前言 由于需要在登录时&#xff0c;附上一些用户说明书的弹窗 对于ElMessageBox的基本知识详细了解 可通过官网了解基本的语法知识ElMessageBox官网基本知识 1. 基本知识 Element Plus 是一个基于 Vue 3 的组件库&#xff0c;其中…

C++ Primer Plus第十八章复习题

1、使用用大括号括起的初始化列表语法重写下述代码。重写后的代码不应使用数组ar。 class z200 { private:int j;char ch;double z; public:Z200(int jv,char chv&#xff0c;zv) : j(jv), ch (chv), z(zv){} };double x 8.8; std::string s "what a bracing effect ! …

前端---闭包【防抖以及节流】----面试高频!

1.什么闭包 释放闭包 从以上看出&#xff1a;一般函数调用一次会把内部的数据进行清除--但是这种操作却可以一起保留局部作用域的数据 // 优点:1、可以读取函数内部的变量 2、让这些变量始中存在局部作用域当中 2.闭包产生的两种业务场景&#xff1a;防抖、节流 2.1防抖 举…

Mysql教程(0):学习框架

1、Mysql简介 MySQL 是一个开放源代码的、免费的关系型数据库管理系统。在 Web 开发领域&#xff0c;MySQL 是最流行、使用最广泛的关系数据库。MySql 分为社区版和商业版&#xff0c;社区版完全免费&#xff0c;并且几乎能满足全部的使用场景。由于 MySQL 是开源的&#xff0…

【Windows】 IDimager Photo Supreme 2024(图片管理软件)安装教程

软件介绍 IDimager Photo Supreme 2024是一款专业的图片管理软件&#xff0c;旨在帮助用户有效地组织、管理和浏览他们的照片收藏。以下是该软件的一些主要特点和功能&#xff1a; 图片管理&#xff1a;Photo Supreme提供强大的图片管理功能&#xff0c;可以帮助用户轻松地整理…

笔记89:LeetCode_135_分发糖果

前言&#xff1a; 注&#xff1a;代码随想录中没有很清楚的提起想出方法的思路&#xff0c;只是给出了解决这个问题的大致思路和代码&#xff1b;下面我将介绍一下我的思考过程&#xff0c;并贴出实现代码&#xff1b; a a a a 思考过程&#xff1a; 思路1&#xff1a;为了…

Win32 API

个人主页&#xff1a;星纭-CSDN博客 系列文章专栏 : C语言 踏上取经路&#xff0c;比抵达灵山更重要&#xff01;一起努力一起进步&#xff01; 一.Win32 API 1.Win32 API介绍 Windows这个多作业系统除了协调应⽤程序的执⾏、分配内存、管理资源之外&#xff0c;它同时也是…

【408真题】2009-15

“接”是针对题目进行必要的分析&#xff0c;比较简略&#xff1b; “化”是对题目中所涉及到的知识点进行详细解释&#xff1b; “发”是对此题型的解题套路总结&#xff0c;并结合历年真题或者典型例题进行运用。 涉及到的知识全部来源于王道各科教材&#xff08;2025版&…

nginx服务器执行的过程

一:打包 1.打包前的分析 文件路径下npm run preview -- --report 生成打包之后的内容 2.解决有些内容体积过大的问题 1.删除有些不使用但是占用较多的,将main.js上import删除,打包时不会有 2.不能删除但是内容较大的 vue.config.js文件夹下 externals: { vue: Vue,…

mysql5.5版本安装过程

mysql是关系型数据库的管理系统 将安装包放在 c盘根目录 名称为mysql 在该路径下cmd进入命令执行窗口 出现此页面说明安装成功 需要修改配置文件内容 将my-medium.ini 复制粘贴并改名为 my.ini 并添加如下内容 改好之后在mysql目录下cmd进入命令执行窗口 切换到cd bin …

[集群聊天服务器]----(一)项目简介

在最近的学习中&#xff0c;实现了基于muduo网络库的集群聊天服务器&#xff0c;在此做一个剖析以及相关内容的梳理介绍&#xff0c;希望可以帮助到大家。 这一篇&#xff0c;先来简单介绍一下这个项目。 源码地址 Cluster_Chat_System-项目 项目技术特点 使用C开发并基于 …

ASP+ACCESS公司门户网站建设

【摘 要】随着计算机科学的发展&#xff0c;数据库技术在Internet中的应用越来越广泛&#xff0c;为广大网络用户提供了更加周到和人性化的服务。本文讲解了一个公司的网站的建设&#xff0c;它基于数据关联规则的公司个性化页面及动态数据生成案例&#xff0c;在网页方面&…

Linux--线程的认识(一)

线程的概念 线程&#xff08;Thread&#xff09;是操作系统中进行程序执行的最小单位&#xff0c;也是程序调度和分派的基本单位。它通常被包含在进程之中&#xff0c;是进程中的实际运作单位。一个线程指的是进程中一个单一顺序的控制流&#xff0c;一个进程中可以并发多个线…

Django与前端框架协作开发实战:高效构建现代Web应用

title: Django与前端框架协作开发实战&#xff1a;高效构建现代Web应用 date: 2024/5/22 20:07:47 updated: 2024/5/22 20:07:47 categories: 后端开发 tags: DjangoREST前端框架SSR渲染SPA路由SEO优化组件库集成状态管理 第1章&#xff1a;简介 1.1 Django简介 Django是一…

hive3从入门到精通(二)

第15章:Hive SQL Join连接操作 15-1.Hive Join语法规则 join分类 在Hive中&#xff0c;当下版本3.1.2总共支持6种join语法。分别是&#xff1a; inner join&#xff08;内连接&#xff09;left join&#xff08;左连接&#xff09;right join&#xff08;右连接&#xff09;…

04.爬虫---Session和Cookie

04.Session和Cookie 1.Session2.Cookie3.详细对比4.Cookie属性结构5.一些误区 Session和Cookie是Web开发中用于用户状态管理的两种常见技术。理解它们的区别对于开发安全的Web应用至关重要。 1.Session Session代表服务器与客户端的一次会话过程。服务器端存储了Session对象&…

智能合作:多AI协同助力传统工作流

背景介绍 红杉资本2024 AI AGENT大会上吴恩达再次介绍了AI四大设计模式即&#xff1a; 反思&#xff08;Reflection)&#xff1b;工具使用&#xff08;Tool use&#xff09;&#xff1b;规划&#xff08;Planning)&#xff1b;多智能体协作(Multi-agent collaboration)&#…

spring模块(三)Spring AOP(2)使用

一、demo 1、spring项目 &#xff08;1&#xff09;pom <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>4.3.13.RELEASE</version></dependency>&l…

数据分析工程师——什么是数据分析?

数据分析工程师 对于目前就业市场上的技术岗位,除了开发、测试、运维等常见职位之外,数据类岗位也越来越成为热门的求职方向。本文将重点介绍 数据分析 这一新兴岗位。 看到「数据分析」这几个字,也许大家的第一印象一样,觉得要做的工作似乎并不难,有大量数据后根据业务…

Redis分布式存储方案

一、Redis分布式存储方案 1、哈希取余分区 ①、原理 哈希计算&#xff1a;首先&#xff0c;对每个键&#xff08;key&#xff09;进行哈希计算&#xff0c;得到一个整数哈希值&#xff08;hash value&#xff09;。取余操作&#xff1a;将这个哈希值对服务器数量进行取余操作…