- 博客(56)
- 收藏
- 关注
原创 算法打卡19天
返回以该节点为根的子树。如果节点不存在,则返回。,判断其是否是一个有效的二叉搜索树。你需要在 BST 中找到节点值等于。给定二叉搜索树(BST)的根节点。给你一个二叉树的根节点。
2025-06-10 22:52:31
395
原创 算法打卡第18天
合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;合并规则是:对于两个树的每个对应节点,将它们的值相加,并将结果存储在一个新的节点中。通过递归的方式,逐层合并两棵树的节点,最终得到一棵新的二叉树,其中每个节点的值是两棵树对应节点值的和。最大二叉树的定义是:对于每个节点,其左子树上的所有值都小于该节点的值,右子树上的所有值都大于该节点的值。通过递归的方式,每次选择数组中的最大值作为当前子树的根节点,并分别用其左侧和右侧的数组元素构建左右子树,最终构建出满足条件的最大二叉树。
2025-06-08 14:57:49
1094
原创 算法打卡17天(补)
通过层次遍历,逐层记录每层的第一个节点,最终返回最底层的最左边的值。这道题的解题思路是利用深度优先搜索(DFS)遍历二叉树,寻找所有从根节点到叶子节点的路径,使得路径上节点值的和等于目标值。这种方法利用了层次遍历的特性,通过队列的先进先出特性,逐层处理节点,同时记录每层的最后一个节点,从而实现右视图的获取。这道题的解题思路是利用递归遍历二叉树,判断是否存在一条从根节点到叶子节点的路径,使得路径上所有节点的值之和等于目标值。,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
2025-06-08 14:49:57
1110
原创 算法打卡16天
(力扣222题)给你一棵的根节点root,求出该树的节点个数。的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。若最底层为第h层(从第 0 层开始),则该层包含1~ 2h个节点。**进阶:**遍历树来统计节点是一种时间复杂度为O(n)的简单解决方案。你可以设计一个更快的算法吗?
2025-06-06 21:55:42
1391
原创 算法打卡第15天
这种方法利用递归的思想,从根节点开始逐层翻转二叉树的左右子树,简洁高效。递归的终止条件保证了对空节点的正确处理,而交换操作和递归调用确保了整棵树的翻转。这种方法利用递归的思想,通过后序遍历(先计算左右子树高度,再计算当前节点高度)的方式,自底向上计算二叉树的最大深度,简洁高效。这种方法利用递归的思想,通过分别处理左右子树为空和都存在的不同情况,确保能够正确计算二叉树的最小深度。这种方法利用递归的思想,从根节点的左右子树开始,逐层递归比较,确保整棵树的对称性。**说明:**叶子节点是指没有子节点的节点。
2025-06-04 11:20:32
616
原创 算法打卡14天(补)
这种方法通过栈模拟了递归的处理过程,避免了递归的函数调用栈开销,同时通过反转结果数组巧妙地实现了后序遍历的顺序。这种方法利用队列实现了层序遍历的逐层处理,并通过反转结果向量巧妙地满足了题目要求的从下到上的存储顺序。**输入:**root = [1,2,3,4,5,null,8,null,null,6,7,9]这种方法通过队列逐层处理节点,确保了层序遍历的顺序,同时利用队列的大小来区分每一层,简洁高效。(即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)(即逐层地,从左到右访问所有节点)。
2025-06-04 11:09:16
479
原创 Socket网络编程之UDP套件字
UDP传输层的协议,面向无连接,数据报的传输层协议。”:不可靠UDPUDPUDPUCPRecverTCPSenderTCP。
2025-06-01 21:50:39
1154
原创 算法打开13天
(力扣347题)给你一个整数数组 和一个整数 ,请你返回其中出现频率前 高的元素。你可以按 任意顺序 返回答案。示例 1:示例 2:提示:**进阶:**你所设计算法的时间复杂度 必须 优于 ,其中 是数组大小。首先,我们需要明确 单调队列 和 优先队列 是两种不同的数据结构,它们的行为和用途有所不同。单调队列优先队列大顶堆的定义在大顶堆中:时间复杂度: O(nlogk)空间复杂度: O(n)42.二叉树的前序遍历(力扣94题)给你二叉树的根节点 ,返回它节点值的 前序 遍历。示例
2025-06-01 21:48:20
1238
原创 Socket编程之TCP套件字
Socket是一个编程接口(),是一种特殊的文件描述符(write/read)。Socket并不 仅限于独立于具体协议的编程接口,这个接口位于TCP/IP之间介绍一下网络通信的三种主要模式不使用多线程和并发的话只能支持到。
2025-05-31 18:57:40
1126
原创 算法打卡12天
题目要求找到两个单链表的第一个公共节点。核心思路是利用链表长度的差值来对齐链表尾部,从而让两个指针能够同时遍历并找到交点。,随着窗口的滑动,我们需要高效地找到每个窗口的最大值。为了实现这一目标,我们使用了一个自定义的单调队列(的滑动窗口从数组的最左侧移动到数组的最右侧。,请你找出并返回两个单链表相交的起始节点。通过单调队列,我们能够高效地解决滑动窗口的最大值问题,避免。本题的目标是求解滑动窗口中的最大值。返回一个表示表达式值的整数。),因为队列中最多存储窗口大小的元素。)来维护窗口内的元素。
2025-05-31 18:54:52
1192
原创 算法打卡第11天
遍历字符串的每个字符,如果栈为空或当前字符与栈顶字符不相等,则将当前字符压入栈;如果当前字符与栈顶字符相等,则弹出栈顶字符,从而移除这对重复字符。遍历结束后,栈中剩下的字符即为移除重复后的结果。由于栈是后进先出的,我们需要将结果字符串反转,最终返回处理后的字符串。这种方法利用了栈的“后进先出”特性,确保每个左括号都能找到对应的右括号,从而高效地判断括号字符串是否合法。**输入:**s = “([])”**输入:**s = “()”**输入:**s = “(]”,判断字符串是否有效。**输出:**true。
2025-05-30 22:59:37
564
原创 网络编程之网络编程预备知识
意味着在正式通信之前发送,方和接收方需要先建立一条虚拟的连接通道(使用三次握手),通信结束后再拆除这条连接(使用四次挥手)`IP地址只能唯一标识网络中的主机,但是每台主机上面的网络应用不止一个。地址是用来唯一的表示网络上的一台主机的,一台主机可能有多个网络应用程序。进行通信的时候,用到这个IP地址唯一标识一台主机(一个网卡)是一种面向连接的传输层协议,它可以提供高可靠的通信。,如果发送方没有在一定时间内收到接收方的确认应答(主机号:用来标识特定网段中的特定主机的。中,哪些是网段号,哪些是主机号。
2025-05-29 19:09:50
1063
原创 算法打卡第10天
题目要求判断一个字符串是否可以通过重复其子串来构造。核心思路是利用 KMP 算法中的前缀表(请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(使用栈来模拟队列的行为,如果仅仅用一个栈,是一定不行的,需要两个栈。,检查是否可以通过由它的一个子串重复多次构成。,这里要注意输入栈和输出栈的关系。给定一个非空的字符串。
2025-05-29 19:06:27
1049
原创 多线程和并发之线程
前面讲到进程:为了任务(程序),现代操作系统才引进进程的概念分析:创建开销问题:创建一个进程开销:大通信开销问题:进程间的通信进程间通信代价或者开销也是很大的。进程的地址空间是独立,要通信的话需要用第三方的空间。于是,就有人提出能不能在 同一个(线程是一个比进程更小的。它是进程中的执行路径(执行分支),线程也是并发的一种形式。进程内部可以存在多个线程,它并发执行,但是进程内部的所有的线程main函数:进程的。
2025-05-28 21:48:17
1273
原创 算法打卡第九天
字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。字符串的第一个匹配项的下标(下标从 0 开始)。数据范围:1 <= k < 10000, 1 <=输出:输出共一行,为进行了右旋转操作后的字符串。” 和整数 2,函数应该将其转换为 “仅由小写英文字符组成。
2025-05-28 21:44:13
576
原创 算法打卡第八天
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。首先对数组进行排序,这样可以方便后续的去重操作,并且能够利用双指针快速查找满足条件的四元组。本题的目标是反转字符串中的单词顺序,同时去除多余的空格。**进阶:**如果字符串在你使用的编程语言中是一种可变数据类型,请尝试使用。输入字符串以字符数组。会读取以空白字符分隔的单词,因此每行输入被视为一个独立的字符串。
2025-05-27 17:15:21
1127
原创 算法打卡第七天
内层循环使用双指针法,左指针初始化为当前固定元素的下一个位置,右指针初始化为数组末尾。通过计算三数之和来调整指针的位置,小于零则左指针右移,大于零则右指针左移,直到找到和为零的三元组。这里有一个优化条件,如果当前元素大于零则直接返回结果,因为后面的元素都大于零,不可能再形成和为零的三元组。在找到一个有效的三元组后,对左右指针进行去重,跳过所有重复的元素,确保每个三元组只被记录一次。排序后,数组中的元素按非递减顺序排列,相同的元素都相邻。),将四数之和的问题转化为两次两数之和的问题,从而降低了时间复杂度。
2025-05-26 21:06:47
1306
原创 算法打卡第六天
将对应字符次数减一,最后检查数组是否全为 0,若存在非零元素则两字符串字符频率不同,返回。输出结果中的每个元素一定是。中各字符出现次数,再遍历字符串。,编写一个函数来判断。
2025-05-25 23:31:24
435
原创 算法打卡第五天
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。:给定一个单链表,判断链表中是否存在环,并找到环的入口节点。指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。,请你反转链表,并返回反转后的链表。,返回链表开始入环的第一个节点。假设链表的头节点到环的入口的距离为。给你一个链表,删除链表的倒数第。个结点,并且返回链表的头结点。,仅仅是为了标识链表的实际情况。给定一个链表的头节点。,则在该链表中没有环。
2025-05-23 21:14:04
872
原创 算法打开第四天
的节点插入到链表中第一个元素之前。在插入完成后,新节点会成为链表的第一个节点。你 可以选择使用单链表或者双链表,设计并实现自己的链表。以指示链表中的上一个节点。假设链表中的所有节点下标从。等于链表的长度,那么该节点会被追加到链表的末尾。的节点追加到链表中作为链表的最后一个元素。如果下标无效,则返回。如果下标有效,则删除链表中下标为。从虚拟头节点开始遍历链表,检查。是指向下一个节点的指针/引用。如果是双向链表,则还需要属性。,请你删除链表中所有满足。的节点插入到链表中下标为。给你一个链表的头节点。
2025-05-23 08:47:27
468
原创 算法打卡第三天
你想要尽可能多地收集水果。使用一个for循环,j是滑动窗口的终止位置,i是起始位置,也是动态指针,你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组。,并返回其长度**。**如果不存在符合条件的子数组,返回。窗口的结束位置j:j就是遍历数组的指针,是for循环里的索引。窗口的起始位置i:当前窗口值大于等于传入的值,i移动;所有元素,且元素按顺时针顺序螺旋排列的。滑动窗口也可以理解为双指针法的一种,和上面的题的区别是这个是找最长子序列。个正整数的数组和一个正整数。,返回你可以收集的水果的。
2025-05-21 20:17:46
1009
原创 进程之IPC通信二
有两个以上的任务(进程/线程)并发的实体,去访问同一个共享资源(硬件上,软件上)的时候,那么 要保证访问的这个共享资源是有序访问,如果不是有序访问有可能造成不可预知后果。该操作会测试这个信号量的值,如其值 <= 0,那么会等待( 阻塞 )一旦其值>0,这个时候,将它-1,并继续往下执行临界区代码。定义的POSIX标准。映射:把内核或者设备的文件中的一段内存映射到进程的地址空间去,用进程的一个指针,去访问这段。如果这段内存在一个 内核的共享内存中 进程可以访问,线程也可以访问—>既可以用于进程间的同。
2025-05-20 18:42:11
1014
原创 进程之IPC通信一
IPC进程间通信实质:信息(数据)的交换(通信)在父进程内定义一个全局变量A,然后再给A进行赋值。然后再让子进程去读取,不就实现通信了吗。这个方案:纯属扯淡。**原因:**两个进程的地址空间是独立的(物理地址)。sleep(1);cout << "子进程读取p的值:" << *p << " p的地址:"<< p << endl;*p = 200;
2025-05-20 18:39:50
869
原创 算法打卡第二天
元素的顺序可能发生改变。解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。输入: nums = [-1,0,3,5,9,12], target = 9。输入: nums = [-1,0,3,5,9,12], target = 2。输入:nums = [0,1,2,2,3,0,4,2], val = 2。输入:nums = [3,2,2,3], val = 3。输出:5, nums = [0,1,4,0,3,输入:nums = [-4,-1,0,3,10]
2025-05-20 18:23:59
1277
原创 算法打卡第一天
1.使用分割线吧两个数组分割成两部分**,左右元素个数相等或者线左边元素的个数比右边个数多1个,线左边的所有元素的数值<= 右边的所有元素的数值**,中位数就与红线两侧单词元素有关,确定这条红线的位置使用二分查找。2.线左边的所有元素的数值<= 右边的所有元素的数值意味着第一个数组在分割线左边的最大值小于第二个数组在分割线右边的最小值,第二个数组在分割线左边的最大值小于第一个数组在分割线右边的最小值。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。算法的时间复杂度应该为。
2025-05-20 11:45:37
525
原创 文件IO之标准IO
我们是知道系统IO是挺好用。但是在不同操作系统下面,对文件一些管理和API接口都是不一样的。同一 个文件,在不同的操作系统下面, 操作文件的代码其实不一样的。C/C++几乎支持所有的操作系统、使 用C/C++操作文件(系统IO)可移植性。于是C/C++语言标准委员会指定/统一文件操作的接口:标准IO是ANSI C建立的一个标准I/O模型,。它提供了一系列用 于文件输入输出的函数。标准IO是建立在系统调用IO之上的高级抽象。标准IO通过系统。
2025-05-18 07:40:16
880
原创 文件IO之目录操作
opendir函数尝试打开由name指定的目录,并返回一个指向 DIR 结构的指针。这个指针之后可以用于 读取目录中的条目。如果目录成功打开,就可以使用 readdir 函数逐个读取目录中的文件和子目录。成功时,opendir返回一个指向DIR结构的指针,该结构代表打开的目录流。失败时,返回NULL并设置全局变量errno以指示错误的具体原因。常见的错误码包括EACCESENOENTENOTDIR示例fd。
2025-05-18 07:34:28
978
原创 文件IO之文件杂项操作
getcwd 函数是用于获取当前工作目录的绝对路径的一个标准库函数bufNULLgetcwdsize\0getcwdbufgetcwderrnoERANGEgetcwderrnogetcwderrnolimits.h定义了PATH_MAX,这是系统定义的一个常量,表示路径名的最大长度。
2025-05-18 07:32:15
1159
原创 经典 算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。简单来说,算法 就是解决一个问题的。在计算机科学中,算法是程序设计的核心,它决定了程序如何执 行特定的任务。算法的性能评价通常包括两个方面。时间复杂度衡量了算法执行所需的时间资 源,而空间复杂度则衡量了算法执行所需的存储资源。它衡量了一个算法执行所需时间的相 对量度。时间复杂度描述了算法运行时间与输入规模之间的增长关系。
2025-05-15 14:22:05
833
原创 数据结构之图的遍历
图的遍历目的是访问图的每一个顶点恰好一次,,同时访问图中每条边恰好一 次。对于无向图,常见的遍历方式有(Depth-First Search, DFS) 和广度优先遍历(Breadth-First Search, BFS)。
2025-05-07 14:25:46
908
原创 数据结构之图的分类和存储
图(Graph)G由两个集合V和E组成,记为:G=(V,E),其中V是顶点的有穷非空集合(其实就是顶点),E是V 中的有穷集合(就是V(G)和E(G)通常分别表示图G的顶点集合以及边集合,,但是此时的图只有顶点,没有边。举个例子:一个地图: 顶点:城市 边:路 可能只有城市没有路就是E(G)可以为空集合,图只有顶点,没有边。多个城市 a b c d ea 到b的方法(a到其他) :a - b a -c - b a - c - d - b。
2025-05-06 07:23:19
891
原创 Linxu基本操作
文件系统(File System)是操作系统中负责管理存储设备(如硬盘、SSD、USB闪存盘等)上数据和元数据的结构或机制。它为用户和程序提供了一个抽象层,使得数据的存取、检索、更新和删除等操作变 得简单而有效。文件系统不仅负责存储文件本身的数据,还存储了关于文件的信息,如文件名、创建时 间、修改时间、大小、权限(谁可以读、写或执行该文件)以及文件在存储设备上的位置等。文件系统的主要功能和特点包括:1.:文件系统负责将数据以文件的形式存储在物理设备上。
2025-05-03 19:06:00
858
原创 面向对象编程简介
万物皆对象。任何事物都可以看做对象。三大基本特征中,最基础的特征就是封装,要理解封装,要知道两 个基本概念:类和对象。类和结构体在定义时候只是一个蓝图,也是存储在指令中,实例化后才分配内存类是将多个对象的共性提取出来定义的新的数据类型,是对对象属性和行为的抽象描述。类似于结构体类型。
2025-05-03 07:39:51
842
原创 数据结构之平衡二叉树
平衡二叉树(Balanced Binary Tree),又称AVL树(Adelson-Velskii and Landis Tree),是一种特殊的。。其主要特点是任何节点的两个子树的(也可以是空树),即每个节点的 左子树和右子树的高度差至多等于1。这种性质确保了树的高度保持相对较低,从而提高了查找、插入和 删除操作的效率。因为树的本质是为了帮助提高查找、插入和删除操作的效率,如果树不平衡,那么在 根节点的左右两边元素数量差过大,则体现不出提升效率。
2025-05-02 13:16:34
1232
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人