当前位置: 首页 > news >正文

代碼隨想錄算法訓練營|第三十九天|738.单调递增的数字、968.监控二叉树、第八章 贪心算法總結。刷题心得(c++)

目录

讀題

738.单调递增的数字

自己看到题目的第一想法

看完代码随想录之后的想法

968.监控二叉树

自己看到题目的第一想法

看完代码随想录之后的想法

738.单调递增的数字 - 實作

思路

Code

968.监控二叉树  - 實作

思路

Code

贪心算法 總結

贪心理论基础

貪心很簡單,只是常識嗎

貪心算法有沒有套路

怎麼辨認出貪心算法

貪心題目

贪心简单题

贪心中等题

贪心难题

總結

自己实现过程中遇到哪些困难

今日收获,记录一下自己的学习时长

相關資料

第八章 贪心算法 part06


讀題

738.单调递增的数字

自己看到题目的第一想法

我在思考局部最優可能就是由後往前遍歷,倆倆比較假設後大於前,則不用變,前大於後,那就減掉前面的值,遍歷全部的數,但實際要怎麼解,帶馬上沒有想法。

看完代码随想录之后的想法

看完之後發現跟我的想法相同,但更直接一點是把後面的數都變為9,很直接但很符合貪心的想法,基本上這樣做就不用擔心是否為單調遞增,並且取最大的單調遞增數並且透過flag紀錄i在哪裡開始要全部變成9,整體透過兩個不嵌套的迴圈解決這個問題。

另外轉成string也很棒,就是讓我們可以更直覺地去操控數字,因為如果沒有的話可能要花更多的代碼量去處理最後的結果。

968.监控二叉树

自己看到题目的第一想法

在思考是不是貪心算法是找到葉子節點的父節點,並且之後都往跳兩層的父節點,這樣就可以找到全部了,但因為牽涉到二叉樹,並不是那麼了解到底怎麼處理。

看完代码随想录之后的想法

貪心思路,後序遍歷,狀態劃分,四種情況

左右都有覆蓋

左右至少有一個無覆蓋

左右至少有一個有攝像頭

最後遍歷根節點無覆蓋,加攝像頭

看完之後覺得這題我只思考到貪心算法,但是後序遍歷,這個我需要去複習,狀態劃分以及四種情況我沒有思考到,但題目是有趣的,讓我對二叉樹以及貪心算法有個好玩的結合。

738.单调递增的数字 - 實作

思路

  1. n轉為string -> 方便處理數字變化
  2. flag記錄從哪裡開始變為九
  3. 假設前一個數大於當前的數,紀錄flag並且將number[i - 1] -- (因為在string當中,--可以直接將數字往下掉一個數,並且可以想像這個數就是要減掉,當前的位數才能為9)
  4. 將flag往後的數全部改為9
  5. 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.监控二叉树  - 實作

思路

  1. 定義三個狀態: 有覆蓋、無覆蓋、有攝像頭
  2. 二叉樹的四種可能性
    1. 左右都有覆蓋
    2. 左右至少有一個無覆蓋
    3. 左右至少有一個有攝像頭
    4. 根節點無覆蓋,加攝像頭
  3. 定義一個result紀錄結果
  4. 定義一個函數遍歷二叉樹
    1. 假設遍歷到null,需要回傳覆蓋,那在葉子節點的父節點才會加上一個攝像頭
    2. 左右遍歷
    3. 中節點處理三種可能性
  5. 主函數
    1. result初始化
    2. 遍歷節點,假設回傳為0 則代表最後一種狀態result++
    3. 回傳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自动化框架的设计模式 自动化测试框架有很多种&#xff0c;常见的自动化框架分类如下&#xff1a; 在使用上面的自动化框架时&#xff0c;通常会结合使用分层思想&#xff0c;也就是一些自动化框架设计模式&#xff0c;今天重点分享一下UI自动化框架设计使用比较多的一种…...

Web架构安全分析/http/URL/Cookie攻击

Web 架构安全分析 Web 工作机制及基本概念 传统 Web 架构 LAMP 网页 概念 网页就是我们可以通过浏览器上网看到的精美页面&#xff0c;一般都是经过浏览器渲染过的 .html 页面&#xff0c;html 语言在浏览器中渲染。其中包含了CSS、JavaScript 等前端技术。通过浏览器访问…...

.git 目录中有什么?

好吧&#xff0c;我想你们中的大多数人每天都或多或少地使用 git&#xff0c;但是您是否研究过 git 创建的 .git 文件夹中的内容&#xff1f;本文[1]我们将一起探索一下&#xff0c;了解里面到底发生了什么。 ❝ 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全景打造沉浸式家装体验

当下&#xff0c;用户对生活品质要求日益提升&#xff0c;越来越多的用户对多功能家装用品需求较大&#xff0c;由此造就了VR全景家装开始盛行。VR全景家装打破传统二维空间模式&#xff0c;通过视觉、交互等功能让用户更加真实、直观的体验和感受家居布置的效果。 一般来说&am…...

Ubuntu服务器 Clash Dashboard

正文发不出来 链接&#xff1a;【Linux】解决Ubuntu服务器版本无法使用Clash Dashboard的问题 这个图展示了RNA-Seq实验数据生成的流程。下面是该流程的逐步解释&#xff1a; mRNA或总RNA提取&#xff1a;首先&#xff0c;从细胞或组织样本中提取mRNA或总RNA。mRNA是经过剪切…...

创建数据库表的命令

创建数据库表的通用语法&#xff1a; ​CREATE TABLE table_name (column1 datatype constraint,column2 datatype constraint,...columnN datatype constraint ); 其中&#xff0c;table_name 为要创建的表名&#xff0c;column1 到 columnN 为表的列名&#xff0c;datatype …...

ubuntu18.04 LTS卸载qtcreator-10.0.2

之前通过命令&#xff0c;通过.run文件&#xff0c;安装了Qt Creator 默认安装路径是/opt/ 卸载 在安装路径下&#xff0c;可以看到QtCreatorUninstaller文件 命令行运行该执行文件&#xff0c;会弹出卸载窗口&#xff0c;记得勾选下面的“仅卸载”...

通过字符设备驱动并编写应用程序控制三盏灯亮灭

现象 键盘按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 下使用初步

前言 在微服务中&#xff0c;随着服务越来越多&#xff0c;对调用链的分析越来越复杂。如何能够分析调用链&#xff0c;定位微服务中的调用瓶颈&#xff0c;并对其进行解决。 本篇博客介绍springCloud中用到的链路追踪的组件&#xff0c;Spring Cloud Sleuth和Zipkin&#xf…...

深入探究音视频开源库 WebRTC 中 NetEQ 音频抗网络延时与抗丢包的实现机制

目录 1、引言 2、什么是NetEQ&#xff1f; 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配置 配置页面如下图所示&#xff0c;根据需要&#xff0c;填入登录用户名、密码、文件存放路径&#xff0c;注意如果要使用自定义的代码结构配置&#xff0c;要勾选图中框出来的选项。 Code FileName&#xff1a; $!velocityTool.camelCaseName(${question.tit…...

Golang通道(Channel)原理解析

引言 并发编程是现代软件开发中的一个重要主题。Golang作为一门并发友好的编程语言&#xff0c;提供了一种简单而强大的机制&#xff0c;即通道&#xff08;Channel&#xff09;&#xff0c;用于在不同的Goroutine之间进行通信和同步。通道的设计和原理是Golang并发模型的核心…...

使用树莓派搭建文件共享服务器-samba服务器

局域网内部通过文件共享来传输文件是一种非常方便的方式&#xff0c;小米摄像头也支持用文件共享smb模式将视频备份到局域网中的文件服务器上。之前我一直使用荣耀pro路由器游戏版&#xff0c;是自带USB接口支持文件共享服务的&#xff0c;接上USB移动硬盘&#xff0c;小米摄像…...

GitLab使用webhook触发Jenkins自动构建

1、jenkins安装gitlab插件 在插件管理中&#xff0c;搜索gitlab安装这个插件。 2、job中配置webhook地址和密钥 进入job设置&#xff0c;构建触发器中就可以看到gitlab的webhook配置&#xff0c;复制URL地址和随机令牌至gitlab中 勾选后&#xff0c;就可以展开设置&#xff…...

柔性数组的使用及注意事项

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的子集&#xff09;是一棵树&#xff0c;则称该树为图G的生成树&#xff08;支撑树&#xff09;&#xff0c;简称G的树。图G有支撑树的充分必要条件为图G连通。 2、最小生成树问题 连通图G(V,E)&#xff0c;每条边…...

【LeetCode】43. 字符串相乘

1 问题 给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 “2”, num2 “3” 输出: “…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

MongoDB学习和应用(高效的非关系型数据库)

一丶 MongoDB简介 对于社交类软件的功能&#xff0c;我们需要对它的功能特点进行分析&#xff1a; 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具&#xff1a; mysql&#xff1a;关系型数据库&am…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的&#xff0c;根据Excel列的需求预估的工时直接打骨折&#xff0c;不要问我为什么&#xff0c;主要…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据信息管理&#xff0c;对于手机的各种软件也是备受用户的喜爱&#xff0c;社区养老保险系统小程序被用户普遍使用&#xff0c;为方…...