- 博客(31)
- 收藏
- 关注
原创 【Leetcode热题100】108.将有序数组转换为二叉搜索树
摘要:该问题要求将有序数组转换为高度平衡的二叉搜索树(BST)。关键思路是利用数组的有序性,每次选取中间元素作为根节点,递归构建左右子树以保证平衡。具体实现中,通过二分法确定中间位置,左半部分构建左子树,右半部分构建右子树,直到区间为空。算法时间复杂度为O(n),空间复杂度为O(n)。核心代码使用递归函数DFS,处理左闭右开区间,确保生成的BST既满足搜索性质又保持高度平衡。
2026-02-16 21:06:25
84
原创 Leetcode111. 二叉树的最小深度
本文提供了两种计算二叉树最小深度的方法。方法1采用递归方式,时间复杂度O(n),空间复杂度O(logn),通过四种情况处理:空节点、左子树空、右子树空、左右子树非空。方法2使用广度优先搜索(BFS),时间复杂度O(n),空间复杂度O(n),通过队列按层遍历,遇到第一个叶子节点时立即返回当前深度。两种方法都能有效求解二叉树最小深度问题,递归法适合深度优先场景,而BFS法在广度优先时效率更高。
2026-02-13 09:56:14
66
原创 卡码网C++基础课|10.平均绩点
该程序用于计算学生成绩的平均绩点。输入为一行包含多个字母(A/B/C/D/F代表不同分数)的字符串,程序会遍历每个字符并转换为对应的分数值(A=4,B=3等)。遇到无效字符时输出"Unknown"并跳过该行,否则计算并输出平均分(保留两位小数)。通过标志位flag控制错误处理,确保只处理有效输入行。
2026-02-11 10:52:03
250
原创 卡码网C++基础课|9.打印正方形
该程序通过嵌套循环打印一个空心正方形。用户输入边长n后,程序使用双重循环遍历每个位置,当处于边界位置(i=0/n-1或j=0/n-1)时输出"*",否则输出空格。最终输出一个由星号组成边框的空心正方形图案。程序简洁地实现了图形输出的基本逻辑。
2026-02-11 10:49:40
133
原创 Leetcode1822. 数组元素积的符号(看起来很简单!本题判断积的符号即可!!!)
一开始算了所有的积,但是提交时测试没通过,后来发现这个题目真的没必要把数组所有数的乘积算出来,判断乘积符号就可以了。1. 如果数组中存在 0:乘积一定为 0,直接返回 0。负数个数为奇数 → 乘积为负 → 返回 -1。负数个数为偶数 → 乘积为正 → 返回 1。空间复杂度: O(1)时间复杂度: O(n)
2026-02-10 19:38:32
36
原创 【Leetcode热题100】53. 最大子数组和
摘要:本文介绍了求解最大子数组和的Kadane算法。该算法通过动态规划思想,在O(n)时间复杂度和O(1)空间复杂度下解决问题。核心思路是遍历数组时,对于每个元素,选择延续之前的子数组或从当前元素重新开始。具体实现中维护两个变量:current_sum记录以当前元素结尾的最大子数组和,max_sum记录全局最大值。算法效率高,代码简洁,是解决最大子数组和问题的经典方法。
2026-02-10 12:16:07
166
原创 Leetcode3719. 最长平衡子数组 I
该题解通过暴力法遍历所有子数组,判断其中偶数和奇数元素是否数量相等。使用两个集合分别存储偶数和奇数元素,当集合大小相等时更新最长平衡子数组长度。时间复杂度O(n²),空间复杂度O(n)。核心是双重循环枚举子数组起点和终点,并通过集合统计元素奇偶性来验证平衡条件。
2026-02-10 09:46:57
675
原创 卡码网C++基础课|8.奇怪的信
使用取模运算和整数除法来分解一个整数并获取其各位数字,取模运算是用来计算一个整数除以另一个整数后的余数,通常用于判断一个数是否能被另一个数整除,以及计算一些循环和条件操作的条件。
2026-02-09 08:24:24
21
原创 Leetcode1382. 将二叉搜索树变平衡
摘要:本题通过中序遍历将二叉搜索树转为有序数组,再采用二分递归方法构建平衡BST。首先对原树进行中序遍历得到升序数组,然后每次取中间元素作为根节点,递归构建左右子树。该方法时间复杂度O(n),空间复杂度O(n),核心步骤包括中序遍历收集节点值和递归构建平衡树结构。
2026-02-09 08:17:04
447
原创 Leetcode110.平衡二叉树
摘要:本文提出了判断平衡二叉树的递归解法。算法通过计算每个节点的左右子树高度差(≤1),并递归检查左右子树是否平衡。时间复杂度为O(n²)(最坏链表状树),空间复杂度O(n)(递归栈深度)。C++实现使用辅助函数height()计算高度,主函数isBalanced()进行平衡性判断。
2026-02-08 07:44:29
214
原创 卡码网C++基础课|6.数组的倒序与隔位输出
用于存储相同数据类型的元素的数据结构。固定大小、连续存储、下标访问。C++中声明数组的方式为。dataType表示数组元素的类型,比如int、double、char等。arrayName是为数组指定的名称,类似于变量名称。arraySize是数组的大小,即它可以容纳多少个元素。
2026-02-07 09:09:20
66
原创 Leetcode1653.使字符串平衡的最少删除次数
摘要: 题目要求通过最少删除操作使字符串平衡(所有'a'在'b'左侧)。解法基于枚举分割点,将字符串分为左'a'右'b'两部分。使用前缀和数组b[i]统计左侧'b'的数量(需删除),后缀和数组a[i]统计右侧'a'的数量(需删除)。遍历所有分割点,计算b[i]+a[i]的最小值,并与全'a'或全'b'方案比较。时间复杂度O(n),空间复杂度O(n)。核心步骤包括构建前缀/后缀和数组,枚举分割点取最小值。
2026-02-07 08:19:30
461
原创 卡码网C++基础课|5.A+B问题VIII
这段C++代码实现了A+B问题的变种,用于处理多组整数求和。程序首先读取测试用例数n,然后依次处理每组数据:每组先读取整数a表示后续数字个数,接着读取a个整数b并求和,最后输出总和。每组结果间用空行分隔(最后一行除外)。代码使用嵌套循环结构,外层处理测试用例,内层完成求和计算和格式化输出。
2026-02-06 10:34:19
31
原创 卡码网C++基础课|4.A+B问题IV
摘要:该C++程序实现多组整数求和功能。使用while循环持续读取每组整数个数n,当n为0时终止程序。每组数据读取前初始化sum为0,通过内层循环读取n个整数并累加。最后输出每组累加结果并换行。程序使用iostream进行输入输出,采用标准命名空间简化代码,通过cin/cout实现控制台交互,适合处理连续的A+B类求和问题。
2026-02-06 10:21:32
36
原创 Leetcode3634.排序+双指针法
摘要:本文提出使用排序+双指针法解决使数组平衡的最少移除数目问题。首先对数组进行排序,然后使用双指针遍历:左指针固定元素,右指针寻找满足条件的边界。通过计算当前窗口大小与数组长度的差值来更新最小移除数目。算法时间复杂度为O(nlogn),空间复杂度为O(logn)。该方法高效地找到了最优解,代码实现简洁明了。
2026-02-06 07:41:42
141
原创 【Leetcode热题100】11.盛水最多的容器
宽(两条垂直线较短线长度 height[ ])长(两条垂直线距离 right-left)++left 或 --right。right(指向数组最右端)left(指向数组最左端)
2026-02-05 17:25:25
93
原创 卡码网C++基础课|3. A+B问题III
本文介绍了C++中A+B问题的代码实现及基础语法要点。示例代码演示了使用while循环读取输入,当a和b同时为0时终止循环。重点讲解了if条件语句的三种形式(单if、if-else、if-elseif)、关系运算符(>,<,==等)和逻辑运算符(&&,||,!)的使用方法,以及break和continue语句在循环控制中的作用差异:break用于完全终止循环,而continue仅跳过当前迭代。
2026-02-05 16:03:58
40
原创 卡码网C++基础课|2.A+B问题Ⅱ
本文介绍了C++中处理A+B问题的两种实现方法。第一种使用while循环持续接收输入次数n,再通过for循环执行n次加法运算并输出结果。第二种详细讲解了for循环的语法结构,包括初始化语句(i=0)、条件判断(i<n)和循环操作(i++),说明如何利用for循环实现n次重复操作。两种方法都展示了基本的输入输出处理和循环控制结构,适用于解决类似的编程问题。
2026-02-05 11:24:39
40
原创 卡码网C++基础课|1.A+B问题Ⅰ
该程序实现了一个简单的A+B求和功能。通过循环读取用户输入的两个整数a和b,计算它们的和并输出结果。程序使用了iostream库进行输入输出操作,利用while循环持续处理输入数据直到结束。每次计算后都会输出结果并换行。这是一个典型的ACM编程入门题目,展示了基本的输入输出和算术运算操作。
2026-02-05 09:24:08
170
原创 【Leetcode热题100】56.合并区间
2.贪心合并:用双指针 i 和 j 配合,i 标记当前合并组的起点,j 探索所有能和当前组合并的区间,动态更新合并组的最大右边界,最终将合并后的区间存入结果数组。(3)内层循环用 j = i+1 向后探索,若后续区间的左边界 ≤ 当前合并组的右边界 t,则更新 t 为两者右边界的最大值,并继续探索;1.排序预处理:将所有区间按左边界从小到大排序,确保重叠或相邻的区间会扎堆出现,为后续批量合并奠定基础。(4)将合并后的区间 [intervals[i][0], t] 加入结果数组 ans。
2026-02-04 16:05:38
494
1
原创 【Leetcode热题100】283.移动零
移动到数组的末尾,同时保持非零元素的相对顺序。,必须在不复制数组的情况下原地对数组进行操作。你能尽量减少完成的操作次数吗?,编写一个函数将所有。
2026-02-04 15:18:19
244
原创 【Leetcode热题100】128.最长连续序列
找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。最长数字连续序列是 [1, 2, 3, 4]。请你设计并实现时间复杂度为。给定一个未排序的整数数组。
2026-02-03 08:36:14
38
原创 【Leetcode热题100】1.两数之和
因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。,请你在该数组中找出 和为目标值 target。的那 两个 整数,并返回它们的数组下标。你可以想出一个时间复杂度小于。你可以按任意顺序返回答案。
2026-02-02 14:50:04
179
原创 【浙大版《数据结构(第2版)》题目集】习题2.2 数组循环左移
摘要: 本文实现了一个数组循环左移的高效算法。给定一个包含n个元素的数组和移动位数m,要求在不使用额外数组的情况下,将数组元素循环左移m位。算法采用三次反转法:首先反转前m个元素,然后反转剩余元素,最后整体反转数组。该方法时间复杂度为O(n),空间复杂度为O(1)。示例输入8个数字左移3位时,输出正确结果"45678123"。算法通过取模运算处理m>n的情况,确保移动有效性,并按格式要求输出结果。
2025-06-20 12:43:57
649
原创 【浙大版《数据结构(第2版)》题目集】习题2.1 简单计算器
模拟简单运算器的工作。假设计算器只能进行加减乘除运算,运算数和结果都是整数,四种运算符的优先级相同,按从左到右的顺序计算。
2025-06-18 13:44:43
390
原创 【浙大版《数据结构(第2版)》题目集】习题1.9 有序数组的插入
其中List结构定义如下:/* 保存线性表中最后一个元素的位置 */L是用户传入的一个线性表,其中元素可以通过>、==、<进行比较,并且题目保证传入的数据是递减有序的。函数Insert要将X插入Data[]中合适的位置,以保持结果依然有序(注意:元素从下标0开始存储)。但如果X已经在Data[]中了,就不要插入,返回失败的标记false;如果插入成功,则返回true。另外,因为Data[]中最多只能存MAXSIZE个元素,所以如果插入新元素之前已经满了,也不要插入,而是返回失败的标记。
2025-06-15 15:53:07
656
原创 【浙大版《数据结构(第2版)》题目集】习题1.8 二分查找
其中 List 结构定义如下:/* 保存线性表中最后一个元素的位置 */L是用户传入的一个线性表,其中元素可以通过>、==、<进行比较,并且题目保证传入的数据是递增有序的。函数要查找X在Data中的位置,即数组下标(注意:元素从下标1开始存储)。找到则返回下标,否则返回一个特殊的失败标记NotFound。
2025-06-14 15:02:40
746
原创 【浙大版《数据结构(第2版)》题目集】实例1.1 最大子列和问题:3层for循环穷举所有子列和
给定K个整数组成的序列{ N1, N2, ..., NK },“连续子列”被定义为{ Ni, Ni+1, ..., Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。
2025-06-13 21:08:00
239
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅