- 博客(128)
- 收藏
- 关注
原创 算法设计题(查找)
首先,我们需要定义一个表示二叉树结点的结构体TreeNodeint val:结点的值。:指向左子树的指针。:指向右子树的指针。int val;} TreeNode;
2024-11-08 18:42:22
784
原创 算法设计题(树和二叉树)
char data;// 数据域// 左孩子指针// 右孩子指针1.求二叉树中的度数为2的结点2.求二叉树中值最大的元素。3.将二叉树各结点存储到一维数组中。4.按先序输出二叉树中各结点,并输出它们所在的层次(根结点为第1层)。5.编写算法,判断二叉树7是否是完全二叉树。6.交换二又树各结点的左右子树。7.写出在二叉树中查找值为的结点在树中层数的算法。8.设计算法计算给定二叉树中单孩子结点的数目。
2024-11-04 18:19:32
719
原创 单链表的基本操作
定义链表节点中存储的数据类型,这里设定为int。SLTNode:链表节点的结构体,包含数据和指向下一个节点的指针,用于构建链表。函数声明SLTPrint:打印链表内容的函数。:在链表的尾部插入新节点。:在链表的头部插入新节点。SLTPopBack:删除链表最后一个节点。:删除链表第一个节点。SLTFind:查找链表中第一个与给定值相等的节点,并返回该节点的指针。SLTInsert:在给定节点之前插入新节点。:在指定节点后插入新节点。SLTErase:删除指定节点。
2024-10-28 17:19:48
835
原创 数据结构练习题(链表)
著名的Josephus问题 据说著名犹太 Josephus有过以下的故事:在罗⻢⼈占领乔塔帕特后,39个犹太⼈与 Josephus及他的朋友躲到⼀个洞中,39个犹太⼈决定宁愿死也不要被⼈抓到,于是决定了⼀个⾃杀 ⽅式,41个⼈排成⼀个圆圈,由第1个⼈开始报数,每报数到第3⼈该⼈就必须⾃杀,然后再由下⼀ 个重新报数,直到所有⼈都⾃杀⾝亡为⽌。开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开。1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开。
2024-10-27 19:29:09
1162
原创 c语言练习题
base: 指向要排序数组的指针(可以是任意类型的数组)。num: 数组中的元素数量。size: 每个元素的大小(以字节为单位)。compar: 比较函数,用于比较两个元素。该函数接收两个参数,这两个参数都是void*类型,因此在比较函数内部需要进行类型转换。代码:// 比较函数,用于qsort排序// 初始化结果变量// 对每一行进行排序i++) {// 计算每一列中的最大值并累加y >= 0;y--) {// 初始化当前列的最大值j++) {// 更新最大值。
2024-10-26 21:44:31
1060
原创 c语言练习题(数组)
注意,因为 m = 0 ,所以 nums1 中没有元素。nums1 中仅存的 0 仅仅是为了确保合并结果可以顺利存放到 nums1 中。,其中恰好有两个元素只出现一次,其余所有元素均出现两次。,5,6] ,其中斜体加粗标注的为 nums1 中的元素。需要合并 [1,2,3] 和 [2,5,6]。平方后,数组变为 [16,1,0,9,100]排序后,数组变为 [0,1,9,16,100]需要合并的数组是 [] 和 [1]。[5, 3] 也是有效的答案。需要合并 [1] 和 []。合并结果是 [1]。
2024-10-25 16:48:52
835
原创 顺序表的基本操作
2下面代码实现了一个动态顺序表的基本操作,包括初始化、销毁、插入、删除、查找等功能。是上面各项操作的函数的具体实现过程。)及其相关操作函数。动态顺序表使用动态内存分配来存储数据。1下面的头文件代码定义了一个动态顺序表(3输入具体数值调用函数的过程。1顺序表的基本操作有。
2024-10-24 18:00:49
188
原创 数据结构练习题(链表-p66)
删除操作完成后,需要小心地更新指向链表的指针。如果我们删除的是头节点,则需要更新。思路:要删除x的直接前驱,需要判断其直接前驱的前一个结点的情况。每次删除一个节点时,更新。: 我们需要遍历链表,以找到第。个节点开始,逐个删除后面。思路:遍历链表,统计值为。指针以指向下一个节点。
2024-10-21 15:55:33
793
原创 数据结构练习题5(链表和栈)
指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数。字符串遍历完之后,栈是空的,就说明全都匹配了。如果链表中有某个节点,可以通过连续跟踪。链表中有一个环,其尾部连接到第二个节点。链表中有一个环,其尾部连接到第一个节点。,返回链表开始入环的第一个节点。来表示链表尾连接到链表中的位置(,仅仅是为了标识链表的实际情况。返回索引为 1 的链表节点。返回索引为 0 的链表节点。给定一个链表的头节点。,判断字符串是否有效。如果链表无环,则返回。,则在该链表中没有环。
2024-10-20 23:29:53
824
原创 数据结构练习题4(链表)
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。从各自的表头开始算起,链表 A 为 [0,9,1,2,4],链表 B 为 [3,2,4]。从各自的表头开始算起,链表 A 为 [2,6,4],链表 B 为 [1,5]。在 B 中,相交节点前有 1 个节点。相交节点的值为 8 (注意,如果两个链表相交则不能为 0)。相交节点的值为 2 (注意,如果两个链表相交则不能为 0)。
2024-10-19 23:04:01
927
原创 数据结构练习题3(链表)
删除原始链表中所有重复数字的节点,只留下不同的数字。,请你反转链表,并返回反转后的链表。,请你删除链表中所有满足。给定一个已排序的链表的头。给你一个链表的头节点。
2024-10-18 17:01:17
880
原创 数据结构练习题2(链表)
单向循环链表(Singly Circular Linked List)是一种链表结构,其中每个节点指向下一个节点,最后一个节点则指向头节点,形成一个循环。要遍历这种链表并打印每个节点的值,我们需要从头部节点开始,依次访问每个节点,直到再次回到头部节点。
2024-10-17 21:32:56
307
原创 数据结构(栈)
栈(Stack)是一种线性数据结构,遵循后进先出(LIFO, Last In First Out)的原则。这意味着最后一个被放入栈中的元素会第一个被取出。栈通常用于需要在其中临时存储数据并按照特定顺序访问这些数据的场景。
2024-10-17 13:34:59
876
1
原创 数据结构练习题1(链表)
在顺序存储中,我们假设两个数组都是有序的(升序),然后将它们合并成一个新的有序数组。过将链表首尾相连形成一个环,然后通过找到新的头节点并断开环来实现链表的旋转。假设我们有两个有序链表,我们将它们合并成一个有序链表。删除所有重复的元素,使每个元素只出现一次。,旋转链表,将链表每个节点向右移动。给定一个已排序的链表的头。给你一个链表的头节点。
2024-10-16 23:39:12
1006
原创 数据结构(队列)
一 队列的定义队列是一种特殊的线性表,它只允许在表的一端进行插入操作,而在另一端进行删除操作。进行插入操作的一端称为队尾(rear),进行删除操作的一端称为队头(front)。二 队列的特性先进先出(FIFO,First In First Out)就像在生活中的排队一样,最先进入队列的元素将最先被取出。例如,在银行排队办理业务,先来的客户先得到服务。操作受限插入操作只能在队尾进行,删除操作只能在队头进行。这保证了队列的有序性和特定的操作方式。动态性队列的长度可以根据实际需求动态变化。
2024-10-14 22:25:01
750
原创 数据结构(线性表)
线性表是一种基础的数据结构,其主要特点是:数据元素之间存在一种线性关系(一对一)。线性表的每一个数据元素都有一个唯一的前驱和后继,除了第一个元素没有前驱,最后一个元素没有后继有限性:线性表中数据元素的个数是有限的。序列性:数据元素之间存在着先后顺序,即线性表中的数据元素是有顺序的。相同数据类型:线性表中的数据元素具有相同的数据类型。顺序线性表:数据元素在内存中占据连续的存储空间。链式线性表:数据元素在内存中不必连续,但每个元素都包含指向下一个元素的地址(指针)一、顺序表的定义。
2024-10-13 23:06:21
1024
原创 c语言知识(求字符串长度的三种方法)
计算器法是通过一个循环来遍历字符串中的每个字符,直到遇到字符串结束符。指针-指针法是通过移动指针来遍历字符串,并计算相对位置来得到长度。递归法是通过递归调用来计算字符串长度,直到遇到字符串结束符。
2024-10-13 11:13:28
1121
原创 c语言练习题(指针内容)
对于数组名a,当它单独放在sizeof内部时,表示整个数组。对于数组名a,当它与运算符结合使用时,表示数组首元素的地址。对于地址操作(如&aa + 0&a[0]),地址的大小在 32 位系统上是 4 字节,在 64 位系统上是 8 字节。对于解引用操作(如*a*&a),得到的是数组元素或数组本身,大小取决于数据类型。
2024-10-12 16:16:02
406
原创 c语言练习题2(字符串和函数的使用)
回文函数用于判断一个给定的字符串是否为回文。输入是一个字符数组(字符串),输出是一个布尔值,表示该字符串是否为回文。编写一个 C 语言程序,计算两个整数在二进制表示中有多少位不同。2. 比较这两个整数在二进制表示中的每一位(共32位)是否不同。1. 提示用户输入两个整数。3. 统计不同的位的数量。4. 输出不同的位数。
2024-10-10 22:59:02
425
原创 数据结构(排序)
一、定义排序是将一组数据元素按照某个关键字的值递增或递减的次序重新排列的过程。这个关键字是数据元素中的某个数据项,通过比较关键字的大小来确定数据元素的先后顺序。二、目的便于查找例如在一个有序数组中查找某个元素,使用二分查找等算法效率更高。如果数据是无序的,可能只能进行顺序查找,时间复杂度较高。数据呈现的有序性在很多应用场景中,如成绩排名、文件按时间顺序排列等,需要数据以有序的形式展示,以便于人们理解和分析。三、分类内部排序和外部排序内部排序指待排序的数据元素全部存放在计算机内存中的排序算法。
2024-10-10 22:17:17
862
原创 c语言练习题1(数组和循环)
它的工作原理是通过将待搜索区间分成两半,判断要查找的元素可能在哪一半,然后继续在可能存在目标元素的那一半区间内查找,直到找到元素或区间被缩小为0(即未找到元素)。:设置两个指针(或索引),分别指向数组的开始(left = 0)和结束(right = n-1),其中n是数组的长度。给定一个一维整型数组,请编写一个程序,统计数组中每个元素出现的次数,并打印出每个元素及其对应的出现次数。给定一个m×n的矩阵,请编写一个程序实现该矩阵的转置,即行列互换,得到一个n×m的矩阵。然后,将中间元素与目标值进行比较。
2024-09-19 20:02:38
1110
原创 c语言中的自定义类型(结构体)
结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构的成员可以是标量、数组、指针,甚至是其他结构体。
2024-08-19 22:47:14
1142
原创 动态规划(2024/7/20)
需要注意的是,如果第一列或第一行中有障碍,那么障碍之后的所有格子的路径数量都应为0,因为障碍会阻挡路径。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。开始遍历,因为第一行和第一列已经初始化了,然后按照从上到下、从左到右的顺序更新dp数组的值。开始遍历,因为第一行和第一列已经初始化了,然后按照从上到下、从左到右的顺序更新dp数组的值。网格的左上角 (起始点在下图中标记为 “Start” )。有障碍,路径数量为0,直接返回0。
2024-07-20 23:52:44
996
2
原创 动态规划练习题(2024/7/18)
动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。动态规划是一种解决多阶段决策过程最优化问题的数学方法。它通常用于解决具有重叠子问题和最优子结构性质的问题,通过将问题分解为更小的子问题并记录每个子问题的解,最终通过组合这些子问题的解来求得原问题的最优解。动态规划算法通常用于优化问题,如最短路径、最长公共子序列、背包问题等,其核心思想是通过空间换时间,避免重复计算,从而提高效率。所以动态规划中每一个状态一定是由上一个状态推导出来的,
2024-07-18 23:51:08
1129
原创 贪心算法(2024/7/16)
目标是找出最少需要安装的摄像头数量,覆盖整棵树的所有节点。那么从后向前遍历,就可以重复利用上次比较得出的结果了,从后向前遍历332的数值变化为:332 -> 329 -> 299。举个例子,数字:332,从前向后遍历的话,那么就把变成了329,此时2又小于了第一位的3了,真正的结果应该是299。判断重叠区间问题 先排序,让所有的相邻区间尽可能的重叠在一起,按左边界,或者右边界排序都可以.一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。首先,根据每个区间的左边界,对给定的区间集合。
2024-07-16 22:46:52
3560
原创 贪心算法练习题(7/2)
给定一个区间的集合 ,其中 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。示例 1:输入: intervals = [[1,2],[2,3],[3,4],[1,3]]输出: 1解释: 移除 [1,3] 后,剩下的区间没有重叠。示例 2:输入: intervals = [ [1,2], [1,2], [1,2] ]输出: 2解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。示例 3:输入: intervals = [ [1,2], [2,3] ]输出: 0解
2024-07-02 23:26:38
1080
原创 贪心算法练习题(2024/6/27)
编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。
2024-06-27 23:38:17
732
原创 贪心算法练习题(2024/6/24)
给你一个整数数组 和一个整数 ,按以下方法修改该数组:重复这个过程恰好 次。可以多次选择同一个下标 。以这种方式修改数组后,返回数组 可能的最大和 。示例 1:输入:nums = [4,2,3], k = 1输出:5解释:选择下标 1 ,nums 变为 [4,-2,3] 。示例 2:输入:nums = [3,-1,0,2], k = 3输出:6解释:选择下标 (1, 2, 2) ,nums 变为 [3,1,0,2] 。示例 3:输入:nums = [2,-3,-1,5,-4
2024-06-24 23:43:22
863
原创 贪心算法练习题(2024/6/18)
贪心的本质是选择每一阶段的局部最优,从而达到全局最优。将问题分解为若干个子问题找出适合的贪心策略求解每一个子问题的最优解将局部最优解堆叠成全局最优解。
2024-06-20 00:02:25
1221
原创 回溯算法练习题(2024/6/18)
的目标是填充数独中的空白格子(用’.'表示),使得每个数字都符合数独的规则(每行、每列、每个3x3子数独内都不能有重复的数字)。在每一层递归中,通过循环尝试将皇后放置在当前行的每一个列上,然后递归处理下一行。这种方法通过逐行放置皇后,并通过回溯撤销不符合条件的放置,最终找到所有合法的N皇后布局。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。的目的是在棋盘上逐行放置皇后,并检查每一步是否符合规则。时,即所有行都处理完毕,此时找到了一个合法的皇后布局,将其加入。
2024-06-18 00:12:19
977
原创 回溯算法练习题(2024/6/14)
因为要考虑处理重复元素的情况。实际上,整个数组都要遍历到,因此终止条件是在每次递归时自然完成的。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。,找出并返回所有该数组中不同的递增子序列,递增子序列中。,其中可能包含重复元素,请你返回该数组所有可能的。返回的解集中,子集可以按。这里没有明确的终止条件判断。给定一个不含重复数字的数组。
2024-06-14 15:49:38
1100
原创 回溯算法练习题(2024/6/12)
如果当前已经搜索到索引 `i` 的位置,下一次搜索就从 `i+1` 的位置开始,这样确保了不会重复搜索已经处理过的部分,也符合回溯算法的思路。每次递归调用时,我们都会更新切割线,使得下一次搜索的范围不会重复之前已经搜索过的部分。在回溯过程中,如果发现当前元素与前一个元素相同,并且前一个元素未被使用过,那么就需要跳过当前循环,避免重复选择相同元素。所以,在处理组合问题时,递归参数中的 `startIndex` 可以被理解为切割线,决定了每一轮递归搜索的起点,帮助我们避免重复搜索和有效地控制搜索范围。
2024-06-12 21:01:30
786
原创 回溯算法练习题(2024/6/10)
在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。2 和 3 可以形成一组候选,2 + 2 + 3 = 7。注意 2 可以使用多次。该列表不能包含相同的组合两次,组合可以以任何顺序返回。如果至少一个数字的被选数量不同,则两种组合是不同的。7 也是一个候选, 7 = 7。,并以列表形式返回。中可以使数字和为目标数。对于给定的输入,保证和为。所有可能的有效组合的列表。没有其他符合的组合了。没有其他符合的组合了。
2024-06-10 23:31:48
865
原创 数据库练习题
这张表中存所有用户,每个用户都有一个唯一的 users_id ,role 是一个表示用户身份的枚举类型,枚举成员为 (‘client’, ‘driver’, ‘partner’)。这张表中存所有出租车的行程信息。是 SQL 中的一个窗口函数,用于计算一个值的密集排名,即在结果集中按照指定的排序条件为每个行分配一个唯一的整数排名值,并且没有间隔。请注意,即使第 7 行和第 8 行的 visit_date 不是连续的,输出也应当包含第 8 行,因为我们只需要考虑 id 连续的记录。dense_rank。
2024-06-07 16:27:05
1715
原创 二叉树练习题(2024/6/5)
当栈为空时,所有节点都已经遍历并翻转,返回根节点完成翻转操作。子树不对称:如果左节点的左子树与右节点的右子树不对称,或者左节点的右子树与右节点的左子树不对称,那么这两个节点也不对称。左右节点为空情况:当左节点为空而右节点不为空,或者左节点不为空而右节点为空时,这种情况下两个节点不对称。遍历当前层的节点,取出队首节点,如果存在左子节点,则将左子节点入队;根节点为空:如果根节点为空,则二叉树被视为对称的,因为空树被认为是对称的。节点值不相等:如果左右节点的值不相等,那么这两个节点不对称。, 检查它是否轴对称。
2024-06-05 21:09:32
728
原创 二叉树练习题(2024/6/3)
具体来说,在遍历二叉树的过程中,我们将待访问的节点放入栈中,然后不断从栈中弹出节点,并按照规定的顺序访问节点的值,并将其子节点放入栈中。中序遍历,中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了。:确定递归函数需要传入的参数,通常包括当前问题的输入以及一些辅助参数,返回值通常是当前问题的解或者某种状态。:确定在每一层递归中应该做些什么,通常包括对参数的处理、递归调用自身及返回结果的处理。
2024-06-03 23:18:07
903
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人