自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 牛客101:二叉树

本文总结了二叉树相关的18种常见算法实现,主要包括: 三种基础遍历(前序、中序、后序)的递归实现 层序遍历及其变种(之字形打印) 二叉树深度、路径和、镜像等基础操作 二叉搜索树相关操作(验证、最近公共祖先) 二叉树序列化/反序列化 二叉树重建及右视图输出 每种算法均给出核心代码实现,涵盖递归、迭代、DFS、BFS等多种解法,并附有重点问题说明(如平衡二叉树判断的自顶向下/自底向上解法)。这些算法是二叉树相关面试题的常见考点。

2025-10-27 14:54:29 748

原创 【递归、搜索、回溯】专题二:二叉树dfs

本文总结了六种二叉树相关算法解法:1)计算布尔二叉树值(后序遍历);2)求根到叶节点数字和(DFS累计);3)二叉树剪枝(递归判断零子树);4)验证二叉搜索树(中序递增特性);5)二叉搜索树第K小元素(中序计数);6)二叉树所有路径(先序遍历记录)。各解法均采用递归思路,充分利用了二叉树的结构特性,如后序/中序遍历、剪枝判断和路径记录等技巧。

2025-10-27 12:41:30 502

原创 【递归、搜索、回溯】专题一:递归

本文介绍了递归搜索回溯的经典应用案例。主要内容包括:1)汉诺塔问题的递归解法,通过分解为子问题实现盘子移动;2)合并两个有序链表,通过比较节点值递归拼接;3)反转链表的递归实现,改变节点指向关系;4)两两交换链表节点的递归处理;5)k个一组反转链表的递归方法;6)快速幂算法实现Pow(x,n)。这些案例展示了递归思想在解决分治问题时的应用模式:将大问题分解为相似子问题,通过递归调用来解决子问题,最终合并结果。

2025-10-25 17:52:13 541

原创 基础算法:多源BFS、BFS解决拓扑排序

本文介绍了多源BFS和拓扑排序算法在多道LeetCode题目中的应用。主要内容包括:1)多源BFS的实现方法,通过将多个起点同时入队来处理01矩阵、飞地数量、地图最高点等问题;2)拓扑排序在课程表问题中的应用,通过建立入度表和邻接表来判断课程安排的可行性;3)特殊应用如火星词典问题,通过比较字符顺序建立拓扑关系。文章提供了各题目的代码实现,强调算法实现中的关键细节,如边界条件处理、队列操作和环检测等。

2025-10-24 11:48:58 250

原创 Linux网络编程:应用层自定义协议与序列化

2025.10.24.0:45

2025-10-24 00:46:11 1034

原创 基础算法:BFS解决floodfill、最短路问题

本文介绍了BFS算法在图论问题中的应用,主要分为洪水填充和最短路问题两类。洪水填充部分通过图像渲染、岛屿数量和被围绕区域等问题,展示了BFS结合队列和标记数组的解法。最短路问题部分则讲解了迷宫出口、基因变化和单词接龙等题目,重点阐述了如何通过BFS计算最短路径。文章还提及了高尔夫砍树问题中多目标点的BFS优化策略。整体展示了BFS在解决网格遍历和最短路径问题中的通用思路和实现方法。

2025-10-23 12:30:44 534

原创 基础算法:优先级队列

本文总结了STL中优先级队列和关联容器的比较函数使用差异。优先级队列使用less创建大根堆(父节点小于子节点时交换),greater创建小根堆;而set/map中less对应升序,greater对应降序。通过四个LeetCode例题展示了应用场景:1)最后一块石头重量(大根堆处理);2)数据流第K大元素(小根堆维护前K大);3)前K高频单词(自定义比较函数处理同频次排序);4)数据流中位数(双堆法维护平衡)。重点解析了不同容器底层实现(堆与红黑树)导致比较行为差异的原因。

2025-10-22 14:47:21 783

原创 牛客101:二分查找/排序

本文总结了六种常见算法题型及解法:1. 二分查找基础模板,强调循环条件包含等号的情况判断;2. 二维数组查找的两种解法(逐行二分和线性查找);3. 寻找峰值的四种二分策略,分析不同判断条件下的边界处理;4. 逆序对问题的归并排序解法,提供升序和降序两种实现方案;5. 旋转数组最小值的二分查找,重点处理重复元素情况;6. 版本号比较的双指针解法。每种题型都配有代码示例和关键思路说明,涵盖二分查找、双指针、归并排序等常用算法技巧。

2025-10-21 16:02:16 825

原创 基础算法:队列+BFS

本文介绍了BFS在树结构中的应用,主要包含四道LeetCode题目解法:1. N叉树层序遍历(429题)通过队列实现分层处理;2. 二叉树锯齿形遍历(103题)使用标记位和reverse实现交替方向;3. 二叉树最大宽度(662题)通过节点编号计算宽度,注意溢出问题;4. 每层最大值查找(515题)在层序遍历过程中记录最大值。所有解法都采用队列实现BFS,针对不同问题调整处理逻辑,展示了BFS在树遍历中的灵活应用。

2025-10-21 13:07:56 599

原创 Linux网络编程:Socket编程TCP

本文介绍了基于TCP协议的服务器开发过程,包括套接字创建、绑定、监听和多线程处理等关键步骤。主要内容包括: 服务器初始化:创建套接字时选择AF_INET协议族和SOCK_STREAM类型,绑定IP地址和端口号,设置监听队列长度。 连接处理:使用accept函数获取客户端连接,分离监听套接字和服务套接字功能,实现多线程/多进程模型提高并发能力。 通信实现:通过read/write函数进行数据收发,实现简单的回声服务器功能。 性能优化:分析单线程模型的局限性,提出使用多进程、多线程和线程池方案解决并发问题。 安

2025-10-20 18:08:03 941 1

原创 牛客101:链表

本文总结了16种常见链表问题的解法,涵盖反转、合并、排序、判环、回文等经典题型。主要内容包括:1. 反转链表(双指针/递归);2. 区间反转(虚拟头结点);3. K个一组反转(递归+双指针);4. 合并有序链表(双指针);5. 判环与入口(快慢指针);6. 删除倒数第N个节点(快慢指针);7. 回文判断(数组/反转/栈);8. 奇偶重排(双指针);9. 删除重复元素(单/双指针)。每种解法都配有详细注释的代码实现,并强调了虚拟头结点、快慢指针等关键技巧,是系统学习链表算法的实用指南。

2025-10-20 13:06:19 1111

原创 基础算法:栈系列

本文介绍了栈在解决字符串相邻字符问题中的应用,通过5个LeetCode题目展示了具体实现:1)删除相邻重复项;2)处理退格字符串比较;3)基本计算器II的双栈解法;4)字符串解码的嵌套处理;5)验证栈序列的模拟方法。每个问题都给出了C++代码实现,展示了如何用栈或模拟栈结构解决问题。文章强调栈在处理这类问题中的优势,同时指出可以通过其他数据结构模拟栈行为。

2025-10-20 12:06:47 381

原创 基础算法:字符串系列

本文介绍了四种字符串处理算法:1. 最长公共前缀的两种解法(两两比较和统一比较);2. 最长回文子串的中心扩展和动态规划解法;3. 二进制求和的模拟加法实现;4. 字符串相乘的高精度乘法实现。文中提供了详细的代码实现和关键思路解析,包括处理进位、字符数字转换等常见问题。这些算法均来自LeetCode经典题目,涵盖了字符串处理中的常见技巧。

2025-10-19 13:15:28 298

原创 Linux网络编程:Socket编程UDP

本文介绍了UDP网络程序的实现过程,包括回声服务器和翻译服务器的开发。主要内容包括:1) 使用socket函数创建UDP套接字,通过bind绑定端口;2) 实现服务器与客户端通信,使用recvfrom接收数据,sendto发送响应;3) 处理IP地址转换,包括字符串IP与整数IP的相互转换;4) 实现INADDR_ANY绑定,使服务器可被外网访问;5) 扩展功能至翻译服务器和聊天室系统,引入线程池处理多客户端请求。文章详细说明了UDP网络编程的关键步骤和技术要点,展示了从基础通信到复杂业务功能的实现路径。

2025-10-18 20:45:56 1098

原创 基础算法:哈希表

本文总结了哈希表在算法题中的常见应用场景。首先介绍两数之和问题,通过哈希表存储数值和下标实现快速查找;其次是字符重排判断,利用数组模拟哈希表统计字符频率;接着是重复元素检测,通过哈希表判断元素是否存在;然后是限定距离的重复元素检测,在哈希表中存储元素及其最近下标;最后是字母异位词分组,通过排序字符串作为哈希键来分组。这些案例展示了哈希思想在解决查找、统计、分组等问题中的高效性,同时体现了数组模拟哈希表的技巧。

2025-10-18 12:41:13 379

原创 笔试强训:Week -2

本文总结了多种算法题解,主要涉及高精度运算、链表操作、动态规划、贪心算法等常见题型。内容包括:大数加减乘除模拟;链表反转与相加;斐波那契数列应用;路径规划DP;股票买卖问题;字符串处理;数学问题求解等。重点展示了如何运用双指针、状态压缩、空间优化等技巧提升算法效率,并提供了多种解题思路的比较分析。文章通过简洁的代码实现和关键算法思路说明,帮助理解各类题型的解题方法。

2025-10-17 23:50:15 1332

原创 基础算法:链表系列

本文总结了链表常见操作技巧和经典题目解法。针对链表操作,建议使用虚拟头节点简化边界处理,注意结点插入顺序,合理定义变量。重点讲解了五大题型:1.两数相加(模拟高精度加法);2.两两交换节点(递归/迭代);3.重排链表(快慢指针+逆序+合并);4.合并K个升序链表(分治/优先队列);5.K个一组翻转链表(分组逆序)。每种题型都给出了清晰的解题思路和代码实现,包括虚拟节点的使用、指针操作技巧等。

2025-10-17 11:26:19 917

原创 基础算法:分治

本文总结了LeetCode中关于排序算法的经典题目,包括颜色分类(快排思想)、快速排序、TopK问题(第K大元素和最小K个数)、归并排序及其应用(逆序对统计、右侧小于当前元素的个数、翻转对)。重点分析了快速排序和归并排序的实现原理及其优化方式,如随机选取key值、三路划分、全局临时数组等技巧。通过具体代码示例展示了如何利用分治法解决排序相关问题,并比较了不同策略(升序/降序)在统计逆序对时的应用差异。文章为算法学习者提供了排序类问题的系统解题思路和优化方法。

2025-10-16 15:52:08 1141

原创 Linux网络编程:Socket编程预备

本文系统介绍了网络通信中的核心概念与技术要点:1. IP地址与端口号机制:源/目的IP地址实现主机寻址,端口号标识具体进程,二者共同构成套接字(socket)实现精准通信;2. 传输层协议对比:TCP提供可靠、面向连接的字节流服务,UDP则提供无连接、不可靠的数据报服务,各自适应不同场景需求;3. 网络字节序规范:统一采用大端模式确保跨平台兼容性,提供htonl等转换函数处理字节序差异;4. Socket编程接口:详述了socket()、bind()等核心API,并解释sockaddr结构体设计的历史原因。

2025-10-15 16:14:14 1140

原创 基础算法:模拟

本文总结了五道LeetCode算法题的解法:1)替换字符串中的问号,确保不与相邻字符重复;2)计算提莫攻击的中毒总时长;3)Z字形变换字符串的处理方法;4)外观数列的生成逻辑;5)数青蛙问题中通过哈希表统计最小青蛙数量。每个问题都提供了C++实现代码和解题思路,涉及字符串处理、双指针、哈希表等技巧。这些解法注重时间复杂度和边界条件处理,展示了常见算法问题的典型解决方案。

2025-10-15 11:38:12 342

原创 Linux网络编程:宏观网络体系

计算机网络基础概念主要包括网络分层模型、协议设计和数据传输流程。文章首先介绍了网络发展历程,从独立计算机到局域网、广域网的演进,并阐述了协议的本质是通信双方约定的结构化数据格式。重点讲解了OSI七层模型和实际应用的TCP/IP五层协议栈,包括物理层、数据链路层、网络层、传输层和应用层的功能与典型设备。通过局域网通信原理和跨网络传输流程,详细说明了数据封装与解包过程,强调了MAC地址与IP地址的分层设计意义。最后指出网络分层的核心价值在于屏蔽底层差异,提供统一的通信接口,实现异构网络互联。

2025-10-14 20:55:20 860

原创 基础算法:位运算

本文总结了常见位运算问题的解法,包括:1) 位1个数统计(使用bitset或位运算);2) 比特位计数(遍历统计);3) 只出现一次数字(异或运算);4) 出现两次数字分组异或;5) 出现三次数字(按位求和取模);6) 字符唯一性判断(哈希/位图);7) 丢失数字(两次异或);8) 两数之和(异或与进位处理);9) 消失的两个数字(结合异或和分组)。文中提供了各问题的C++实现代码和解题思路。

2025-10-14 12:41:55 855

原创 基础算法:前缀和

本文介绍了前缀和及其相关算法应用。首先给出了前缀和的一维和二维模板代码实现,包括数组区间和的快速计算。然后展示了多个力扣算法题的前缀和解决方案:寻找数组中心下标(724题)、除自身外的数组乘积(238题)、和为K的子数组(560题)、和可被K整除的子数组(974题)、连续数组(525题)以及矩阵区域和(1314题)。这些题目通过构建前缀和数组或结合哈希表,将时间复杂度优化至O(n)或O(n²),显著提高了计算效率。最后还处理了负数取模的统一方法等细节问题。

2025-10-13 10:41:23 1019

原创 基础算法:二分查找

本文总结了二分查找算法的核心思想与应用场景。二分查找通过将数据划分为两个区间并舍弃一部分,实现高效查找。文章详细讲解了标准二分查找的实现方法及常见错误,并扩展到8个LeetCode经典题目(704、34、69、35、852、162、153、LCR173),涵盖了查找边界值、平方根、插入位置、峰值、旋转数组最小值等典型应用。针对每道题目,作者分析了解题思路、边界条件处理技巧,并提供了代码实现,特别强调了mid取值方向与死循环的避免方法,体现了二分法在不同场景下的灵活运用。

2025-10-12 15:04:52 1005

原创 基础算法:滑动窗口

本文总结了滑动窗口算法的常见应用场景及解题思路,通过8道LeetCode典型题目进行讲解。主要包括:长度最小的子数组(209)、无重复字符的最长子串(3)、最大连续1的个数(1004)、将x减到0的最小操作数(1658)、水果成篮(904)、字母异位词(438)、串联所有单词的子串(30)和最小覆盖子串(76)。文章详细分析了每道题的解题步骤,重点阐述了如何利用双指针创建窗口,通过进/出窗口操作维护状态变量,最终实现时间复杂度为O(n)的高效解法。所有代码均采用C++实现,并配有详细注释。

2025-10-11 22:18:44 701

原创 基础算法:双指针

本文总结了双指针算法在LeetCode题目中的应用,包括移动零、复写零、快乐数、盛水容器、三角形个数、两数之和、三数之和及四数之和等问题的解法。双指针技术的核心在于利用数据的单调性,通过指针移动来高效解决问题。文章详细分析了各类问题的解决思路,包括去重处理、边界条件判断等关键点,并提供了相应的代码实现。通过双指针技术,可以显著降低算法的时间复杂度,从O(n³)优化到O(n²)甚至O(n)。

2025-10-10 21:32:19 892

原创 动规:二维费用背包+似包非包

本文介绍了几个二维费用背包问题的动态规划解法。主要包括"一和零"问题(统计字符串中0和1的个数限制下的最大子集)、"盈利计划"问题(在人数和利润限制下的可行方案数)、"组合总和IV"(带顺序的组合问题)以及"不同的二叉搜索树"问题(卡特兰数应用)。针对每个问题,文章给出了基本解法及其空间优化版本,重点讨论了二维费用背包问题的状态转移方程设计和优化技巧,包括倒序遍历、状态压缩等方法。这些解法展示了动态规划在处理多维约束问题时的灵活

2025-10-09 13:30:19 369

原创 Linux系统编程:线程池、设计模式和死锁

本文摘要: 线程池是一种线程使用模式,通过维护多个线程来避免频繁创建销毁线程的开销,适用于短时间任务处理、高并发请求等场景。文章详细介绍了线程池的实现原理,包括固定线程池的实现方式,涉及线程管理、任务队列、互斥锁和条件变量等核心组件。同时探讨了单例模式在线程池中的应用,对比了饿汉式和懒汉式两种实现方式。此外,还分析了线程安全与重入问题,解释了死锁产生的四个必要条件及预防方法。最后指出STL容器和智能指针的线程安全性问题,强调shared_ptr通过原子操作保证引用计数的线程安全。全文通过代码示例和理论分析相

2025-10-09 01:11:37 765

原创 动规:完全背包+多重背包

本文介绍了完全背包问题的算法实现及优化方法。主要内容包括:1. 完全背包模板代码实现,包括二维和一维数组解法;2. 零钱兑换问题的状态转移方程及初始化处理;3. 完全平方数问题的动态规划解法;4. 多重背包问题的处理技巧;5. 针对特定问题的优化策略,如哈希表预处理、倒序遍历等。文章通过具体代码示例展示了动态规划在背包类问题中的应用,并提供了空间优化思路,帮助理解背包问题的核心解决思路。

2025-10-08 02:54:23 1200

原创 Linux系统编程:并发编程之 信号量与日志策略模式解析

本文介绍了POSIX信号量的实现与应用,并设计了一个日志系统。POSIX信号量可用于线程/进程同步,通过sem_init()、sem_wait()、sem_post()等接口实现生产者-消费者模型。基于环形队列重写了该程序,通过空间/数据信号量维护同步关系。日志系统采用策略模式,支持控制台和文件两种输出方式,包含时间戳、日志等级等必要信息,通过运算符重载实现流式输出。文中还探讨了信号量与锁的关系,指出锁是二元信号量的特例。

2025-10-07 01:14:19 1251

原创 Linux系统编程:线程互斥与同步

本文介绍了线程同步与互斥的核心概念。主要内容包括:1)互斥的基本概念,如临界资源、临界区和原子操作;2)互斥量的使用方法,包括初始化、加锁解锁机制及其实现原理;3)线程同步的必要性,通过条件变量解决单纯互斥导致的效率问题;4)生产者-消费者模型的设计与实现,使用阻塞队列实现资源的高效管理。文章通过售票系统案例分析了多线程并发访问共享资源的问题,并展示了使用互斥量的解决方案。最后详细说明了基于阻塞队列的生产者-消费者模型实现,包括互斥锁和条件变量的综合运用,实现了线程间的安全协作。

2025-10-06 01:24:17 1160

原创 动规:01背包

本文系统介绍了背包问题的分类及解法。背包问题是一类组合优化问题,核心是在限定条件下选择物品使总价值最大。文章详细分析了01背包、完全背包、多重背包等主要类型,并针对不同变体(如分组背包、二维费用背包)进行说明。通过动态规划实现方案,重点讲解了空间优化技巧(滚动数组)和初始化方法。提供了多个经典例题(如分割等和子集、目标和等)的代码实现,包括标准解法和优化解法。文章强调01背包是所有背包问题的基础,掌握其解法对其他变体的理解至关重要。

2025-10-05 14:04:26 599

原创 动规:两个数组dp系列

本文总结了8道字符串匹配相关的动态规划算法题,包括最长公共子序列、不相交的线、不同子序列、通配符匹配、正则表达式匹配、交错字符串等。主要采用二维DP表解法,通过状态转移方程处理字符串匹配问题,并介绍了边界处理、下标映射等技巧。所有问题都给出了对应的C++实现代码,展示了如何利用动态规划高效解决字符串匹配问题。

2025-10-03 22:07:02 847

原创 动规:回文串问题

本文总结了6个回文串相关的算法问题及解法:1)回文子串数量统计;2)最长回文子串查找;3)判断字符串能否分割为3个回文子串;4)最少分割次数使全为回文子串;5)最长回文子序列;6)最少插入次数使字符串成为回文串。核心思路是利用动态规划构建二维表,记录各区间回文信息(子串或子序列),通过填表顺序优化和状态转移方程求解。其中子串问题需连续字符,子序列问题则不需要。不同问题通过调整状态表示和转移条件实现,展现了动态规划在回文问题中的通用性和灵活性。

2025-09-29 12:10:26 751

原创 Linux系统编程:线程控制

本文介绍了POSIX线程库(pthread)的基本概念和使用方法。主要内容包括:1. pthread函数库的使用规范,如头文件引入、编译选项和错误检查机制;2. 线程控制函数(pthread_create、pthread_join等)的使用示例;3. Linux中线程的实现原理,指出Linux实际使用轻量级进程(LWP)模拟线程;4. 线程ID的本质是进程地址空间共享区上的虚拟地址;5. 线程终止的三种方式及线程分离(pthread_detach);6. C++11线程库与pthread的关系。文章通过代码

2025-09-29 01:14:15 1080

原创 笔试强训:Week-1

本文整理了牛客网算法题解,涵盖数字统计、数组交集、点击消除、快递费用计算、最小花费爬楼梯等18道题目。主要内容包括:1.数字统计通过枚举和模运算实现;2.数组交集问题提供哈希和双指针两种解法;3.点击消除使用栈结构处理;4.动态规划应用于斐波那契数列和最小花费问题;5.贪心算法在字符串距离和数字处理中的应用;6.深度优先搜索解决单词搜索和岛屿数量问题;7.滑动窗口处理数组子区间问题;8.循环链表和数学方法解决约瑟夫环问题。每道题都给出了核心思路和关键代码实现。

2025-09-27 13:34:47 1061

原创 Linux系统编程:线程概念

本文主要探讨了进程与线程的概念及其内存管理机制。进程是加载到内存中的程序执行流,包含内核数据结构和代码数据;线程则是进程内部的轻量级执行单元。文中详细介绍了分页式存储管理原理,包括虚拟地址与页表的作用、物理内存的组织方式、多级页表结构及转换机制。同时解析了缺页异常处理流程和线程的优缺点,指出线程切换成本低但缺乏保护机制。最后总结了合理使用多线程能提升CPU密集型和IO密集型程序的效率。

2025-09-26 23:45:46 667

原创 动规:子序列系列

本文介绍了常见的子序列动态规划问题及解法。主要内容包括:1. 最长递增子序列(LIS)的基本解法及变型;2. 摆动序列的双状态DP解法;3. 统计最长递增子序列个数的计数方法;4. 数对链问题转化为LIS的解法;5. 等差子序列的哈希表优化;6. 斐波那契子序列和等差子序列的二维DP解法。文章通过多个实例展示了如何利用动态规划解决各种子序列问题,并提供了详细的代码实现和优化思路。

2025-09-26 09:09:05 1332

原创 Linux系统编程:进程信号

信号机制详解摘要 信号是Linux进程间异步通信的软中断机制,本质是内核向目标进程写入信号位图。处理流程分为产生、保存、递达三个阶段: 信号产生 来源:终端组合键(如Ctrl+C触发SIGINT)、系统调用(kill/raise)、软件条件(如管道破裂SIGPIPE)或硬件异常(如除零触发SIGFPE)。 9号(SIGKILL)和19号(SIGSTOP)信号不可被捕获或忽略。 信号保存 通过进程PCB中的pending(未决)、block(阻塞)位图和handler(处理方式)表管理。 sigprocmas

2025-09-23 23:28:20 1122

原创 动规:子数组系列

本文总结了8道关于子数组和子序列的经典算法题目,包括最大子数组和、环形子数组最大和、乘积最大子数组等。每道题目都采用动态规划的思路,通过分析问题特点设计状态转移方程,并考虑了虚拟节点初始化、边界条件处理等细节。文章重点讲解了如何根据不同情况(如首尾相连、负数乘积等)调整动态规划表的构建方式,包括使用辅助表存储最小值或处理特殊情况。最后还介绍了哈希表在字符串匹配和去重中的应用。这些题目展示了动态规划在子数组问题中的灵活运用技巧。

2025-09-22 17:19:05 711

空空如也

空空如也

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

TA关注的人

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