代碼隨想錄算法訓練營|第三十九天|738.单调递增的数字、968.监控二叉树、第八章 贪心算法總結。刷题心得(c++)
目录
讀題
738.单调递增的数字
自己看到题目的第一想法
看完代码随想录之后的想法
968.监控二叉树
自己看到题目的第一想法
看完代码随想录之后的想法
738.单调递增的数字 - 實作
思路
Code
968.监控二叉树 - 實作
思路
Code
贪心算法 總結
贪心理论基础
貪心很簡單,只是常識嗎
貪心算法有沒有套路
怎麼辨認出貪心算法
貪心題目
贪心简单题
贪心中等题
贪心难题
總結
自己实现过程中遇到哪些困难
今日收获,记录一下自己的学习时长
相關資料
第八章 贪心算法 part06
讀題
738.单调递增的数字
自己看到题目的第一想法
我在思考局部最優可能就是由後往前遍歷,倆倆比較假設後大於前,則不用變,前大於後,那就減掉前面的值,遍歷全部的數,但實際要怎麼解,帶馬上沒有想法。
看完代码随想录之后的想法
看完之後發現跟我的想法相同,但更直接一點是把後面的數都變為9,很直接但很符合貪心的想法,基本上這樣做就不用擔心是否為單調遞增,並且取最大的單調遞增數並且透過flag紀錄i在哪裡開始要全部變成9,整體透過兩個不嵌套的迴圈解決這個問題。
另外轉成string也很棒,就是讓我們可以更直覺地去操控數字,因為如果沒有的話可能要花更多的代碼量去處理最後的結果。
968.监控二叉树
自己看到题目的第一想法
在思考是不是貪心算法是找到葉子節點的父節點,並且之後都往跳兩層的父節點,這樣就可以找到全部了,但因為牽涉到二叉樹,並不是那麼了解到底怎麼處理。
看完代码随想录之后的想法
貪心思路,後序遍歷,狀態劃分,四種情況
左右都有覆蓋
左右至少有一個無覆蓋
左右至少有一個有攝像頭
最後遍歷根節點無覆蓋,加攝像頭
看完之後覺得這題我只思考到貪心算法,但是後序遍歷,這個我需要去複習,狀態劃分以及四種情況我沒有思考到,但題目是有趣的,讓我對二叉樹以及貪心算法有個好玩的結合。
738.单调递增的数字 - 實作
思路
- n轉為string -> 方便處理數字變化
- flag記錄從哪裡開始變為九
- 假設前一個數大於當前的數,紀錄flag並且將number[i - 1] -- (因為在string當中,--可以直接將數字往下掉一個數,並且可以想像這個數就是要減掉,當前的位數才能為9)
- 將flag往後的數全部改為9
- return stoi(number);
Code
class Solution {
public:int monotoneIncreasingDigits(int n) {string number = to_string(n);int flag = number.size();for(int i = number.size() - 1; i > 0; i--) {if(number[i - 1] > number[i]) {flag = i;number[i - 1]--;}}for(int i = flag; i < number.size(); i++){number[i] = '9';}return stoi(number);}
};
968.监控二叉树 - 實作
思路
- 定義三個狀態: 有覆蓋、無覆蓋、有攝像頭
- 二叉樹的四種可能性
- 左右都有覆蓋
- 左右至少有一個無覆蓋
- 左右至少有一個有攝像頭
- 根節點無覆蓋,加攝像頭
- 定義一個result紀錄結果
- 定義一個函數遍歷二叉樹
- 假設遍歷到null,需要回傳覆蓋,那在葉子節點的父節點才會加上一個攝像頭
- 左右遍歷
- 中節點處理三種可能性
- 主函數
- result初始化
- 遍歷節點,假設回傳為0 則代表最後一種狀態result++
- 回傳result.
Code
/*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:int result = 0;int traveral(TreeNode* cur) {if(cur == NULL) return 2; // 假設在葉子節點,需要選擇有覆蓋,那在葉子節點的父節點才會加上一個攝像頭int left = traveral(cur->left);int right = traveral(cur->right);if(left == 2 && right == 2) return 0; //左右都有覆蓋if(left == 0 || right == 0) { //左右至少有一個無覆蓋,則一定要一個攝像頭result++;return 1;}if(left == 1 || right == 1) return 2; // 左右至少有一個攝像頭,則return 2,因為代表該節點有被覆蓋到return -1;}int minCameraCover(TreeNode* root) {result = 0;if(traveral(root) == 0) { //最後一種情況,假設根節點左右節點都有覆蓋,那則要多加一個攝像頭result++;}return result;}
};
贪心算法 總結
贪心理论基础
回顧貪心算法,真的沒有固定的解法,可能有類似的套路,比如說重疊區間,或者是子序和,但整體還是一個思路上的轉換
貪心很簡單,只是常識嗎
貪心算法很簡單,主要體現在代碼上,但難點主要是思路上的轉換,說簡單也不簡單
貪心算法有沒有套路
沒有套路!沒有套路!沒有套路
真的是要讓自己的視野打開,多寫多練習,讓自己的腦袋瘋狂運轉,會越來越好的
怎麼辨認出貪心算法
其實任何情況下只要能推導出局部最優在堆疊到全局最優的題目都可以是貪心算法,但有些問題當然可以套用其他的解題技巧幫忙,貪心算法我認為就像是心法,它沒有招式但所以我們只能意會,很奇妙的章節。
貪心題目
題目分級,來源至代碼隨想錄
贪心简单题
- 贪心算法:分发饼干
- 贪心算法:K次取反后最大化的数组和
- 贪心算法:柠檬水找零
贪心中等题
- 贪心算法:摆动序列
- 贪心算法:单调递增的数字
- 股票系列问题
- 贪心算法:买卖股票的最佳时机II
- 贪心算法:买卖股票的最佳时机含手续费
- 两个维度权衡问题
- 贪心算法:分发糖果
- 贪心算法:根据身高重建队列
贪心难题
这里的题目如果没有接触过,其实是很难想到的,甚至接触过,也一时想不出来,所以题目不要做一遍,要多练!
- 贪心解决区间问题
- 贪心算法:跳跃游戏
- 贪心算法:跳跃游戏II
- 贪心算法:用最少数量的箭引爆气球
- 贪心算法:无重叠区间
- 贪心算法:划分字母区间
- 贪心算法:合并区间
- 其他难题
- 贪心算法:最大子序和
- 贪心算法:加油站
- 贪心算法:我要监控二叉树!
總結
自己实现过程中遇到哪些困难
今天的難點主要在監控二叉樹,單調遞增的數字難點主要在代碼,監控二叉樹則是需要考慮到多個面向的狀態,但其實真的很好玩,理解之後,寫代碼其實反而就是之前二叉樹章節的基礎,主要是思路不好想。
今日收获,记录一下自己的学习时长
整體花大概兩個小時,貪心算法真的很奇妙,但理解之後真的很開心,感覺非常好玩。
相關資料
● 今日学习的文章链接和视频链接
第八章 贪心算法 part06
738.单调递增的数字
https://programmercarl.com/0738.单调递增的数字.html
968.监控二叉树
https://programmercarl.com/0968.监控二叉树.html
总结
https://programmercarl.com/贪心算法总结篇.html
相关文章:
代碼隨想錄算法訓練營|第三十九天|738.单调递增的数字、968.监控二叉树、第八章 贪心算法總結。刷题心得(c++)
目录 讀題 738.单调递增的数字 自己看到题目的第一想法 看完代码随想录之后的想法 968.监控二叉树 自己看到题目的第一想法 看完代码随想录之后的想法 738.单调递增的数字 - 實作 思路 Code 968.监控二叉树 - 實作 思路 Code 贪心算法 總結 贪心理论基础 貪心…...
前言:自动化框架的设计模式
1、UI自动化框架的设计模式 自动化测试框架有很多种,常见的自动化框架分类如下: 在使用上面的自动化框架时,通常会结合使用分层思想,也就是一些自动化框架设计模式,今天重点分享一下UI自动化框架设计使用比较多的一种…...
Web架构安全分析/http/URL/Cookie攻击
Web 架构安全分析 Web 工作机制及基本概念 传统 Web 架构 LAMP 网页 概念 网页就是我们可以通过浏览器上网看到的精美页面,一般都是经过浏览器渲染过的 .html 页面,html 语言在浏览器中渲染。其中包含了CSS、JavaScript 等前端技术。通过浏览器访问…...
.git 目录中有什么?
好吧,我想你们中的大多数人每天都或多或少地使用 git,但是您是否研究过 git 创建的 .git 文件夹中的内容?本文[1]我们将一起探索一下,了解里面到底发生了什么。 ❝ git 在基本层面上只是一堆通过文件名相互链接的文本文件。 ❞ in…...
Debian11系统简单配置
debian11系统简单配置 网卡配置 修改/etc/network/interfaces address 192.168.0.188 gateway 192.168.0.1 netmask 255.255.255.0重启网卡systemctl restart networking.service systemctl restart networking 执行apt 报错 rootdebian:~# apt update 忽略:1 cdrom://[D…...
家装、家居两不误,VR全景打造沉浸式家装体验
当下,用户对生活品质要求日益提升,越来越多的用户对多功能家装用品需求较大,由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式,通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…...
Ubuntu服务器 Clash Dashboard
正文发不出来 链接:【Linux】解决Ubuntu服务器版本无法使用Clash Dashboard的问题 这个图展示了RNA-Seq实验数据生成的流程。下面是该流程的逐步解释: mRNA或总RNA提取:首先,从细胞或组织样本中提取mRNA或总RNA。mRNA是经过剪切…...
创建数据库表的命令
创建数据库表的通用语法: CREATE TABLE table_name (column1 datatype constraint,column2 datatype constraint,...columnN datatype constraint ); 其中,table_name 为要创建的表名,column1 到 columnN 为表的列名,datatype …...
ubuntu18.04 LTS卸载qtcreator-10.0.2
之前通过命令,通过.run文件,安装了Qt Creator 默认安装路径是/opt/ 卸载 在安装路径下,可以看到QtCreatorUninstaller文件 命令行运行该执行文件,会弹出卸载窗口,记得勾选下面的“仅卸载”...
通过字符设备驱动并编写应用程序控制三盏灯亮灭
现象 键盘按1三灯全亮 按0三灯全灭 头文件.h #ifndef __HEAD_H__ #define __HEAD_H__ #define PHY_LED1_MODER 0X50006000 #define PHY_LED1_ODR 0X50006014 #define PHY_RCC 0X50000A28#define PHY_LED2_MODER 0X50007000 #define PHY_LED2_ODR 0X50007014#defin…...
SpringCloud链路追踪——Spring Cloud Sleuth 和 Zipkin 介绍 Windows 下使用初步
前言 在微服务中,随着服务越来越多,对调用链的分析越来越复杂。如何能够分析调用链,定位微服务中的调用瓶颈,并对其进行解决。 本篇博客介绍springCloud中用到的链路追踪的组件,Spring Cloud Sleuth和Zipkin…...
深入探究音视频开源库 WebRTC 中 NetEQ 音频抗网络延时与抗丢包的实现机制
目录 1、引言 2、什么是NetEQ? 3、NetEQ技术详解 3.1、NetEQ概述 3.2、抖动消除技术 3.3、丢包补偿技术 3.4、NetEQ概要设计 3.5、NetEQ的命令机制 3.6、NetEQ的播放机制 3.7、MCU的控制机制 3.8、DSP的算法处理 3.9、DSP算法的模拟测试 4、NetEQ源文件…...
一篇文章教会你C++11入门知识点
C11入门 列表初始化1. {}初始化2. initializer_list 声明1. auto2. decltype3. nullptr 范围for循环STL新增容器1. array2. forward_list3. unordered_map和unordered_set 右值引用和移动语义1. 左值引用和右值引用2. 左值引用和右值引用比较3. 右值引用使用场景和意义4. 右值引…...
idea leetcode配置
idea leetcode配置 配置页面如下图所示,根据需要,填入登录用户名、密码、文件存放路径,注意如果要使用自定义的代码结构配置,要勾选图中框出来的选项。 Code FileName: $!velocityTool.camelCaseName(${question.tit…...
Golang通道(Channel)原理解析
引言 并发编程是现代软件开发中的一个重要主题。Golang作为一门并发友好的编程语言,提供了一种简单而强大的机制,即通道(Channel),用于在不同的Goroutine之间进行通信和同步。通道的设计和原理是Golang并发模型的核心…...
使用树莓派搭建文件共享服务器-samba服务器
局域网内部通过文件共享来传输文件是一种非常方便的方式,小米摄像头也支持用文件共享smb模式将视频备份到局域网中的文件服务器上。之前我一直使用荣耀pro路由器游戏版,是自带USB接口支持文件共享服务的,接上USB移动硬盘,小米摄像…...
GitLab使用webhook触发Jenkins自动构建
1、jenkins安装gitlab插件 在插件管理中,搜索gitlab安装这个插件。 2、job中配置webhook地址和密钥 进入job设置,构建触发器中就可以看到gitlab的webhook配置,复制URL地址和随机令牌至gitlab中 勾选后,就可以展开设置ÿ…...
柔性数组的使用及注意事项
1.柔性数组在结构体当中,并且在结构体的最后面. 2.结构体中除了柔型数组外至少还要有一个其他成员. 3.sizeof()返回结构体的大小不包含柔性数组的大小. 4.malloc 例:struct sdshdr16 *p malloc(sizeof (struct sdshdr16) 32); // 32 为柔性数组的大小 5.free 例: fre…...
数学建模——最优连接(基于最小支撑树)
一、概念 1、图的生成树 由图G(V,E)的生成子图G1(V,E1)(E1是E的子集)是一棵树,则称该树为图G的生成树(支撑树),简称G的树。图G有支撑树的充分必要条件为图G连通。 2、最小生成树问题 连通图G(V,E),每条边…...
【LeetCode】43. 字符串相乘
1 问题 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 “2”, num2 “3” 输出: “…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
现象: android studio报错: [CXX1409] D:\GitLab\xxxxx\app.cxx\Debug\3f3w4y1i\arm64-v8a\android_gradle_build.json : expected buildFiles file ‘D:\GitLab\xxxxx\app\src\main\cpp\CMakeLists.txt’ to exist 解决: 不要动CMakeLists.…...
TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?
在工业自动化持续演进的今天,通信网络的角色正变得愈发关键。 2025年6月6日,为期三天的华南国际工业博览会在深圳国际会展中心(宝安)圆满落幕。作为国内工业通信领域的技术型企业,光路科技(Fiberroad&…...
Golang——7、包与接口详解
包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...
