自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 代码随想录算法训练营第三十二天 |【动态规划1-13】

动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,在关于贪心算法,你该了解这些!中我举了一个背包问题的例子。例如:有N件物品和一个最多能背重量为W 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。

2025-06-14 22:52:52 1227

原创 代码随想录算法训练营第三十一天 |【贪心5】56. 合并区间、738.单调递增的数字

周总结里会对每周的题目中大家的疑问、相关难点或者笔误之类的进行复盘和总结。如果大家发现文章哪里有问题,那么在周总结里或者文章评论区一定进行了修正,保证不会因为我的笔误或者理解问题而误导大家。所以周总结一定要看!本周小结!(贪心算法系列一)(opens new window)本周小结!(贪心算法系列二)(opens new window)本周小结!(贪心算法系列三)(opens new window)本周小结!(贪心算法系列四)(opens new window)

2025-06-03 15:06:08 618

原创 代码随想录算法训练营第二十九天 |【贪心4】452. 用最少数量的箭引爆气球、435. 无重叠区间、 763.划分字母区间

此时问题就是要求非交叉区间的最大个数。这里记录非交叉区间的个数还是有技巧的,如图:区间,1,2,3,4,5,6都按照右边界排好序。当确定区间 1 和 区间2 重叠后,如何确定是否与 区间3 也重贴呢?就是取。

2025-06-03 00:57:31 717

原创 代码随想录算法训练营第二十八天 |【贪心3】134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列

这在leetcode上是一道困难的题目,其难点就在于贪心的策略,如果在考虑局部的时候想两边兼顾,就会顾此失彼。一次是从左到右遍历,只比较右边孩子评分比左边大的情况。一次是从右到左遍历,只比较左边孩子评分比右边大的情况。这样从局部最优推出了全局最优,即:相邻的孩子中,评分高的孩子获得更多的糖果。关于出现两个维度一起考虑的情况,我们已经做过两道题目了,另一道就是135. 分发糖果 (opens new window)。其技巧都是确定一边然后贪心另一边,两边一起考虑,就会顾此失彼。这道题目可以说比。

2025-06-02 21:09:40 694

原创 代码随想录算法训练营第二十五天 |【贪心2】122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II(没看懂)、1005.K次取反后最大化的数组和

这道题目关键点在于:不用拘泥于每次究竟跳几步,而是看覆盖范围,覆盖范围内一定是可以跳过来的,不用管是怎么跳的。

2025-06-02 20:29:53 1023

原创 代码随想录算法训练营第二十四天 |【贪心1】贪心算法理论基础、455.分发饼干、376. 摆动序列、53. 最大子序和

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。这么说有点抽象,来举一个例子:例如,有一堆钞票,你可以拿走十张,如果想达到最大的金额,你要怎么拿?指定每次拿最大的,最终结果就是拿走最大数额的钱。每次拿最大的就是局部最优,最后拿走最大数额的钱就是推出全局最优。再举一个例子如果是 有一堆盒子,你有一个背包体积为n,如何把背包尽可能装满,如果还每次选最大的盒子,就不行了。这时候就需要动态规划。动态规划的问题在下一个系列会详细讲解。这道题是贪心很好的一道入门题目,思路还是比较容易想到的。

2025-05-25 22:03:17 567

原创 代码随想录算法训练营第二十三天 |【回溯4】491.递增子序列、46.全排列、47.全排列 II

力扣题目链接(opens new window)给定一个整型数组, 你的任务是找到所有该数组的递增子序列,递增子序列的长度至少是2。输入: [4, 6, 7, 7]输出: [[4, 6], [4, 7], [4, 6, 7], [4, 6, 7, 7], [6, 7], [6, 7, 7], [7,7], [4,7,7]]给定数组的长度不会超过15。数组中的整数范围是 [-100,100]。给定数组中可能包含重复数字,相等的数字应该被视为递增的一种情况。

2025-05-24 21:19:25 548

原创 代码随想录算法训练营第二十二天 |【回溯3】93.复原IP地址、78.子集、90.子集II

示例: 输入: nums = [1,2,3] 输出: [ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]从图中可以看出,同一树层上重复取2 就要过滤掉,同一树枝上就可以重复取2,因为同一树枝上元素的集合才是唯一子集!(也可以放到递归函数参数里)其实子集也是一种组合问题,因为它的集合是无序的,子集{1,2} 和 子集{2,1}是一样的。startIndex一定是需要的,因为不能重复分割,记录下一层递归分割的起始位置。

2025-05-23 20:35:03 798

原创 【Linux高级全栈开发】2.2.1 Linux服务器百万并发实现2.2.2 Posix API与网络协议栈

本文介绍了Linux服务器实现百万并发的关键技术,包括同步与异步处理的差异、网络I/O线程池的实现、文件描述符(FD)的优化、TCP内存参数的调优以及连接跟踪(conntrack)的原理与优化。通过异步非阻塞I/O模型和线程池架构,可以有效提升服务器的并发处理能力。同时,系统层面的优化如调整FD数量、TCP缓冲区大小、conntrack表大小等,也是实现高并发的关键。此外,文章还简要回顾了Posix API中的网络编程基础,如socket、bind、connect、send和recv等函数的使用。通过这些技

2025-05-21 21:52:29 713

原创 代码随想录算法训练营第二十一天 |【回溯2】39. 组合总和、40.组合总和II、131.分割回文串(难)

切割问题可以抽象为组合问题如何模拟那些切割线切割问题中递归如何终止在递归循环中如何截取子串如何判断回文。

2025-05-21 19:43:30 688

原创 代码随想录算法训练营第二十天 |【回溯】77. 组合、 216.组合总和III、17.电话号码的字母组合

回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。所以以下讲解中,回溯函数也就是递归函数,指的都是一个函数。本篇我们准对求组合问题的回溯法代码做了剪枝优化,这个优化如果不画图的话,其实不好理解,也不好讲清楚。所以我依然是把整个回溯过程抽象为一棵树形结构,然后可以直观的看出,剪枝究竟是剪的哪里。力扣题目链接(opens new window)您需要在二叉树的每一行中找到最大的值。

2025-05-21 10:21:41 812

原创 【Linux高级全栈开发】2.1.3 http服务器的实现

WebServer 是一种软件程序,用于处理客户端(如浏览器)的 HTTP 请求并返回响应。静态资源服务:直接返回 HTML、CSS、JavaScript、图片等文件。动态内容生成:通过后端脚本(如 PHP、Python、Java)生成动态内容。请求路由:将不同 URL 的请求分发到对应的处理逻辑。安全处理:处理 HTTPS 加密、访问控制、请求过滤等。常见的 WebServer 软件Nginx:高性能、轻量级,常用于反向代理和负载均衡。

2025-05-18 23:01:24 949

原创 【Linux高级全栈开发】2.1.2 事件驱动reactor的原理与实现

事件驱动 Reactor 模式是一种用于处理 I/O 多路复用的设计模式,特别适合构建高性能、高并发的网络服务器。它的核心思想是将事件检测和事件处理分离,通过一个事件多路分离器 (Event Demultiplexer) 来监听多个 I/O 通道上的事件,并将事件分发给对应的事件处理器 (Event Handler) 进行处理。Reactor 模式的基本组件事件多路分离器:使用操作系统提供的机制(如 select、poll、epoll 等)来监听多个文件描述符上的 IO 事件事件处理器。

2025-05-18 22:58:49 1208

原创 代码随想录算法训练营第十九天 |【二叉树】669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树、二叉树总结

力扣题目链接(opens new window)给定一个二叉搜索树,同时给定最小边界L 和最大边界 R。通过修剪二叉搜索树,使得所有节点的值在[L, R]中 (R>=L)。你可能需要改变树的根节点,所以结果应当返回修剪好的二叉搜索树的新的根节点。如果不对递归有深刻的理解,这道题目还是有难度的!在二叉树:构造二叉树登场!和二叉树:构造一棵最大的二叉树 (opens new window)之后,我们顺理成章的应该构造一下二叉搜索树了,一不小心还是一棵平衡二叉搜索树。

2025-05-18 15:39:56 1029

原创 代码随想录算法训练营第十八天 |【二叉树】235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

不用使用回溯,二叉搜索树自带方向性,可以方便的从上向下查找目标区间,遇到目标区间内的节点,直接返回。最后给出了对应的迭代法,二叉搜索树的迭代法甚至比递归更容易理解,也是因为其有序性(自带方向性),按照目标区间找就行了。读完本篇,大家会发现二叉搜索树删除节点比增加节点复杂的多。因为二叉搜索树添加节点只需要在叶子上添加就可以的,不涉及到结构的调整,而删除节点操作涉及到结构的调整。彻底掌握第一种递归写法就够了。

2025-05-18 15:38:45 1011

原创 代码随想录算法训练营第十七天 |【二叉树】530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先

这道题目刷过的同学未必真正了解这里面回溯的过程,以及结果是如何一层一层传上去的。那么我给大家归纳如下三点求最小公共祖先,需要从底向上遍历,那么二叉树,只能通过后序遍历(即:回溯)实现从底向上的遍历方式。在回溯的过程中,必然要遍历整棵二叉树,即使已经找到结果了,依然要把其他节点遍历完,因为要使用递归函数的返回值(也就是代码中的left和right)做逻辑判断。要理解如果返回值left为空,right不为空为什么要返回right,为什么可以用返回right传给上一层结果。

2025-05-17 17:24:20 649

原创 代码随想录算法训练营第十六天 |【二叉树】654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

可以发现上面的代码看上去简洁一些,

2025-05-17 17:22:37 630

原创 代码随想录算法训练营第十五天 |【二叉树】513.找树左下角的值、112. 路径总和、106.从中序与后序遍历序列构造二叉树

下面给出用下标索引写出的代码版本:(思路是一样的,只不过不用重复定义vector了,每次用下标索引来分割)

2025-05-14 23:33:38 602

原创 代码随想录算法训练营第十四天 |【栈与队列】110.平衡二叉树 、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数

本题要找到叶子节点,就开始结束的处理逻辑了(把路径放进result里),当 cur不为空,其左右孩子都为空的时候,就找到叶子节点。当遇到左叶子节点的时候,记录数值,然后通过递归求取左子树左叶子之和,和 右子树左叶子之和,相加便是整个树的左叶子之和。分别求出其左右子树的高度,然后如果差值小于等于1,则返回当前二叉树的高度,否则返回-1,表示已经不是二叉平衡树了。给定一个二叉树,返回所有从根节点到叶子节点的路径。判断一个树的左叶子节点之和,那么一定要传入树的根节点,递归函数的返回值为数值之和,所以为int。

2025-05-14 09:50:17 394

原创 代码随想录算法训练营第十三天 |【二叉树】 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度 226.翻转二叉树 (优先掌握递归)

力扣题目链接(opens new window)翻转一棵二叉树。参数就是要传入节点的指针,返回值的话其实也不需要,但是题目中给出的要返回root节点的指针,可以直接使用题目定义好的函数,所以就函数的返回类型为。确定终止条件当前节点为空的时候,就返回确定单层递归的逻辑因为是前序遍历,所以先进行交换左右孩子节点,然后反转左子树,反转右子树。C++代码如下:迭代法#深度优先遍历C++代码迭代法(前序遍历)统一的写法,所以,本题也只需将文中的代码少做修改便可。C++代码如下迭代法(前

2025-05-13 10:40:56 706

原创 【Linux高级全栈开发】2.1高性能网络-网络编程——2.1.1 网络IO与IO多路复用——select/poll/epoll

本文介绍了Linux高性能网络编程中的关键概念和技术,重点探讨了I/O多路复用机制(select、poll、epoll)及其在高并发网络应用中的应用。首先,文章解释了网络I/O的基本概念及其在编程中的实现方式,指出了“一请求一线程”模型的局限性,并提出了基于事件驱动的改进方案。随后,详细介绍了select、poll和epoll三种I/O多路复用技术的原理、工作流程及其优缺点,特别是epoll在性能上的显著优势。最后,文章通过对比表格总结了三种技术的特性,帮助开发者根据实际需求选择合适的技术方案。本文内容为高

2025-05-11 16:26:59 656

原创 代码随想录算法训练营第十二天 |【二叉树】144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历

链式存储的二叉树节点的定义方式int val;

2025-05-11 14:11:52 924

原创 代码随想录算法训练营第十一天 |【栈与队列】150. 逆波兰表达式求值、239. 滑动窗口最大值 、347.前 K 个高频元素

比较函数。

2025-05-10 16:27:24 962

原创 代码随想录算法训练营第十天 |【栈与队列】 232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项

遍历字符串匹配的过程中,栈已经为空了,没有匹配的字符了,说明右括号没有找到对应的左括号return false。但在pop的时候,操作就复杂一些,输出栈如果为空,就把进栈数据全部导入进来(注意是全部导入),再从出栈弹出数据,如果输出栈不为空,则直接从出栈弹出数据就可以了。在项目比较大的时候,由于参数多,全局变量等等,使用递归很容易判断不充分return的条件,非常容易无限递归(或者递归层级过深),,然后递归返回的时候,从栈顶弹出上一次递归的各项参数,所以这就是递归为什么可以返回上一层位置的原因。

2025-05-08 23:21:51 692

原创 代码随想录算法训练营第九天 |【字符串】151.翻转字符串里的单词、卡码网55.右旋转字符串、28.实现strStr、459.重复的子字符串

在C语言中,把一个字符串存入一个数组时,也把结束符 '\0’存入数组,并以此作为该字符串是否结束的标志。在C++中,提供一个string类,string类会提供 size接口,可以用来判断string类字符串是否结束,就不用’\0’来判断是否结束。vector< char > 和 string 又有什么区别呢?string提供更多的字符串处理的相关接口,例如string 重载了+,而vector却没有。所以想处理字符串,还是会定义一个string类型打基础的时候,不要太迷恋于库函数。

2025-05-06 22:39:59 643

原创 代码随想录算法训练营第八天 |【字符串】344.反转字符串、541. 反转字符串II、卡码网:54.替换数字

从后向前填充,因为从前向后填充就是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素整体向后移动。首先对数组大小进行扩充,有几个数字就加几个5,

2025-05-04 11:37:36 474

原创 代码随想录算法训练营第七天 |【哈希表】454.四数相加II、383. 赎金信、15. 三数之和、18. 四数之和

一般来说哈希表都是用来快速判断一个元素是否出现集合里。

2025-05-02 12:24:29 1108

原创 【代码随想录算法训练营第四天】 | 24. 两两交换链表中的节点、707.设计链表、206.反转链表、142.环形链表II

使用虚拟头节点, 链表的增删改会方便很多。

2025-04-27 21:44:30 998

原创 代码随想录算法训练营第六天 |【哈希表】242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

文章链接:https://programmercarl.com/0001.%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC

2025-04-27 16:32:32 648

原创 代码随想录算法训练营第二天 | 209.长度最小的子数组、59.螺旋矩阵II

讲解链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html

2025-04-24 21:22:58 897

原创 【算法Day1】| 704. 二分查找、27. 移除元素

704. 二分查找 题目链接:https://leetcode.cn/problems/binary-search/文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html视频讲解:https://www.bilibili.com/video/BV1fA4y1o715

2025-04-23 22:29:26 801

原创 【Linux入门环境编程】百万并发的服务器

客户端又报错connection timed out问题,在客户端连接数达到65000之前断开,可能问题: 文件系统达到最大值,防火墙连接达到最大值。服务器返回:9223372036854775807,三个客户端返回:397322。在20w左右时,而且连接一开始时服务器内存就已经跑满,开始内存回收。客户端测试代码:mul_port_client_epoll.c。跑到79w左右时,服务器内存崩溃,CPU利用率达到100%服务器返回:65535,三个客户端返回:65535。再次执行以上修改,修改成功!

2025-04-22 22:34:03 670

原创 【Linux入门环境编程】DNS协议与请求+Http客户端请求+TCP服务器实现

​ 域名系统(Domain Name System),人类可读域名和IP地址对应。域名查询:nslookup网络抓包:wiresharkUDP编程的好处:传输速度快(下载)响应速度快(游戏)HTTP 是一个基于 TCP/IP 通信协议,在TCP连接,socket连接的基础上来传递数据的协议(首先要建立tcp连接)HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

2025-04-21 23:02:55 582

原创 【Linux入门环境编程】数据库MySQL

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。RDBMS即关系数据库管理系统(Relational Database Management System)的特点:数据以表格的形式出现每行为各种记录名称每列为记录名称所对应的数据域许多的行和列组成一张表单若干的表单组成database。

2025-04-20 21:22:57 1029

原创 【Linux入门环境编程】多线程并发锁

当一个线程尝试获取一个已经被其他线程持有的自旋锁时,它不会像互斥锁那样进入阻塞状态,而是会不断地循环检查锁是否可用,这种不断循环等待的行为就是 “自旋”。是gcc的一个选项,其用途是指定要链接的库。原子操作指的是在执行过程中不可被中断的操作,即该操作一旦开始,就会一直执行到结束,期间不会被其他线程或进程打断。互斥锁(Mutex)是一种用于多线程或多进程编程中的同步原语,其主要作用是保证在同一时刻,只有一个线程或进程能够访问共享资源,以此避免多个线程或进程同时操作共享资源而引发的数据不一致、竞争条件等问题。

2025-04-14 16:07:17 665

原创 【Linux入门环境编程】Linux文件操作(统计单词数量)+结构体应用(实现通讯录)

int count;结构体后要加;name和phone用控制上限的数组,而不是没有上限的数组指针结构体中有两个以自己的结构体为类型的前后指针结构体内变量不需要初始化,数组用宏定义固定大小即可如何解决scanf输入内存溢出的问题?限制输入长度使用fgets替代scanf动态分配内存(malloc, realloc)二级指针的理解?函数内部修改传入的指针变量,做任何项目,一定要分层次去写,调试和使用代码会特别方便。

2025-04-08 23:44:13 752

原创 【Linux入门环境编程】Shell脚本实现ip宕机地址检测+获取本机ip地址

原生 bash 不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如,两个数相加(**注意使用的是反引号 **`默认情况下,command > file 将 stdout 重定向到 file,command < file 将 stdin 重定向到 file。单引号里的任何字符都会原样输出,单引号字符串中的变量是无效的;创建两个 shell 脚本文件。双引号里可以出现转义字符。

2025-04-07 23:39:28 757

原创 【Day1】一周搞定Linux_C/C++第一天学习内容

虚拟机安装与Linux环境安装,Linux常用目录和文件操作

2025-04-07 16:30:13 872

原创 【一周搞定Linux C和C++】Day0计划

本专栏记录了系统掌握Linux环境编程项目的基础以及学习记录,涵盖从Linux开发环境到Linux C编程等众多实战板块,高效完成。

2025-04-06 20:25:08 937

原创 nvm install报错:***/esbuild npm ERR! command failed

在package.json加上下面的配置,主要是通过npm override来改变esbuild版本信息。npm install 初始化项目报错。

2025-03-13 16:54:08 229

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除