
数据结构
文章平均质量分 51
5?li
这个作者很懒,什么都没留下…
展开
-
二叉树的最大路径和——动态规划
题目描述给定一个二叉树,请计算节点值之和最大的路径的节点值之和是多少。这个路径的开始节点和结束节点可以是二叉树中的任意节点例如:给出以下的二叉树,返回的结果为6示例1输入{-2,1}返回值1示例2输入{-2,#,-3}返回值-2这题有些难,没做出来,看了别人的代码没看懂,后来又看了相关的视频,感觉这里用到了动态规划的思想,树上各结点记录下该结点处的最大路径和,各结点处的最大路径和由于需要继续向上回溯,因此取左子树和右子树中最大路径和较大值加上该结点的值。Max记录整棵树的最转载 2021-01-24 11:30:23 · 444 阅读 · 0 评论 -
在二叉树中找到两个结点的最近公共祖先
题目描述给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。示例1输入[3,5,1,6,2,0,8,#,#,7,4],5,1返回值3思路:首先层序遍历整棵树上的所有结点,对树上每个结点都分别作为根结点,层序遍历其子树,看该子树中是否有o1和o2。如果子树中有o1和o2,则该子树的根结点是o1和o2的公共祖先之一。每次满足条件时min都更新,最终得到的min就是最近公共祖先结点的val值。C++实现:/** * struct TreeNode原创 2021-01-21 16:46:01 · 679 阅读 · 0 评论 -
树的同构——二叉树
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个英文大写字母、其左孩子结点的编转载 2021-01-20 14:38:21 · 336 阅读 · 0 评论 -
最小编辑代价——动态规划
题目描述给定两个字符串str1和str2,再给定三个整数ic,dc和rc,分别代表插入、删除和替换一个字符的代价,请输出将str1编辑成str2的最小代价。示例1输入 “abc”,“adc”,5,3,2返回值 2示例2输入 “abc”,“adc”,5,3,100返回值 8备注:1≤|str1|,|str2|≤50001≤ic,dc,rc≤10000这题好难,看了网上各路大神的代码最后模仿写的。主要创建一个数组dp,记录str1子串转转载 2021-01-13 23:01:45 · 696 阅读 · 0 评论 -
递归求解八皇后问题
题目:八皇后问题在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法递归思路:在第1行安全位置放一个棋子,在第2行安全位置放一个棋子,以此类推,直到八行都放了棋子,第9行时退出递归过程。C++代码://八皇后问题//在8*8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法//思路:在第1行安全位置放一个棋子,在第2行安全位置放一个棋子,以此类推,直到八行都放了棋子转载 2021-01-12 09:37:13 · 350 阅读 · 0 评论 -
数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007。对于50%的数据,size≤104对于75%的数据,size≤105对于100%的数据,size≤2∗105输入描述:题目保证输入的数组中没有的相同的数字示例1:输入[1,2,3,4,5,6,7,0]返回值7刚开始用暴力求解,运行超时了。网上找了别人的思路:(链接:http转载 2021-01-09 11:41:26 · 153 阅读 · 0 评论 -
合并区间
题目描述:给出一组区间,请合并所有重叠的区间。示例1:输入[[10,30],[20,60],[80,100],[150,180]]返回值[[10,60],[80,100],[150,180]]分析:这道题我不会写,参考别人的代码写的。首先将全部的区间按起点进行升序排列,然后依次看一下第i个区间能不能和i-1个区间合并就可以了,如果能合并的话,就把第i个区间变成这两个区间的合并,由于可能存在区间完全被另一个区间包含的情况,因此合并形成的第i个区间的start取第i个区间和第i-1个区间的st转载 2021-01-07 20:36:49 · 244 阅读 · 0 评论 -
矩阵的最小路径和——动态规划
题目描述:给定一个 n * m 的矩阵 a,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是路径和,输出所有的路径中最小的路径和。示例:[[1,3,5,9],[8,1,3,4],[5,0,6,1],[8,8,4,0]]返回值:12备注:1<=n,m<=20001<=arri,j<=100我的初始思路是想从左上角(0,0)开始出发,每一步比较右边和下边元素的大小,哪个小往那边走,一直走到右下角(n-1,m-1)为止。这个思原创 2021-01-05 21:44:09 · 1653 阅读 · 0 评论 -
循环链表的应用——魔术师发牌问题和拉丁方阵问题
魔术师发牌问题问题描述:魔术师利用一副牌中的13张黑牌,预先将他们排好后叠放在一起,牌面朝下。对观众说:“我不看牌,只数数就可以猜到每张牌是什么,我大声数数,你们听,不信?现场演示。”魔术师将最上面的那张牌数为1,把他翻过来正好是黑桃A,将黑桃A放在桌子上,第二次数1,2,将第一张牌放在这些牌的下面,将第二张牌翻过来,正好是黑桃2,也将它放在桌子上这样依次进行,将13张牌全部翻出,准确无误。问:牌的开始顺序是如何安排的?请用循环链表来解决C++实现:#include<iostream>原创 2020-12-30 13:21:26 · 246 阅读 · 0 评论 -
约瑟夫问题——循环链表
题目:据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。用循环链表模拟约瑟夫问题,把41个人原创 2020-12-29 17:06:59 · 272 阅读 · 1 评论 -
单链表查找中间结点
单链表查找中间结点题目描述:随机生成20个元素,构成一个链表,查找链表中间结点的值。方法:快慢指针法C++实现如下:#include<iostream>using namespace std;#define SIZE 20//链表中随机生成20个元素,查找中间结点的值class ListNode{public: int Data; ListNode * Next;};ListNode* CreateList(int size) //生成链表{ ListNode*原创 2020-12-29 13:05:47 · 746 阅读 · 0 评论 -
PTA习题:04-树6 Complete Binary Search Tree (30分)
04-树6 Complete Binary Search Tree (30分)A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys...原创 2020-04-09 11:33:07 · 336 阅读 · 0 评论 -
PTA习题:基础实验4-2.6 目录树 (30分)
基础实验4-2.6 目录树 (30分)在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。输入格式:输入首先给出正整数N(≤104),表示ZIP归档文件中的文件和目录的数量。随后N行,每行有如下格式的文件或目录的相对路径和名称(每行不超过260个字符):路径和名称中的字符仅包括英文字母(区分大小写);符号“\”仅作为路径分隔符出现;目录以符号“\”结束原创 2020-09-09 16:59:51 · 1197 阅读 · 0 评论 -
PTA习题:练习4.2 平衡二叉树的根 (25分)
练习4.2 平衡二叉树的根 (25分)将给定的一系列数字插入初始为空的AVL树,请你输出最后生成的AVL树的根结点的值。输入格式:输入的第一行给出一个正整数N(≤20),随后一行给出N个不同的整数,其间以空格分隔。输出格式:在一行中输出顺序插入上述整数到一棵初始为空的AVL树后,该树的根结点的值。输入样例1:588 70 61 96 120输出样例1:70输入样例2:788 70 61 96 120 90 65输出样例2:88解题思路:读入数据,创建新结点,原创 2020-09-04 16:08:28 · 1839 阅读 · 0 评论 -
PTA习题:习题8.3 银行排队问题之单窗口“夹塞”版 (30分)——队列
习题8.3 银行排队问题之单窗口“夹塞”版 (30分)排队“夹塞”是引起大家强烈不满的行为,但是这种现象时常存在。在银行的单窗口排队问题中,假设银行只有1个窗口提供服务,所有顾客按到达时间排成一条长龙。当窗口空闲时,下一位顾客即去该窗口处理事务。此时如果已知第i位顾客与排在后面的第j位顾客是好朋友,并且愿意替朋友办理事务的话,那么第i位顾客的事务处理时间就是自己的事务加朋友的事务所耗时间的总和。在这种情况下,顾客的等待时间就可能被影响。假设所有人到达银行时,若没有空窗口,都会请求排在最前面的朋友帮忙(包括原创 2020-08-27 11:36:54 · 1850 阅读 · 1 评论 -
PTA习题:进阶实验2-3.2 用扑克牌计算24点 (25分)
进阶实验2-3.2 用扑克牌计算24点 (25分)一副扑克牌的每张牌表示一个数(J、Q、K 分别表示 11、12、13,两个司令都表示 6)。任取4 张牌,即得到 4 个 1~13 的数,请添加运算符(规定为加+ 减- 乘* 除/ 四种)使之成为一个运算式。每个数只能参与一次运算,4 个数顺序可以任意组合,4 个运算符任意取 3 个且可以重复取。运算遵从一定优先级别,可加括号控制,最终使运算结果为 24。请输出一种解决方案的表达式,用括号表示运算优先。如果没有一种解决方案,则输出 -1 表示无解。输入格转载 2020-08-19 21:27:52 · 4148 阅读 · 0 评论 -
PTA习题:基础实验2-2.5 整数分解为若干项之和 (20分)——递归
基础实验2-2.5 整数分解为若干项之和 (20分)将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。输入格式:每个输入包含一个测试用例,即正整数N (0<N≤30)。输出格式:按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N1={n1,n2,…}和N2={m1,m2,…},若存在i使得n1=m1,…,ni=mi,但是ni+1<mi+1,则N1序列必定在N2序列之前输出。每个式原创 2020-08-18 22:26:29 · 3863 阅读 · 1 评论 -
PTA习题:习题2.8 输出全排列 (20分)——递归
习题2.8 输出全排列 (20分)请编写程序输出前n个正整数的全排列(n<10),并通过9个测试用例(即n从1到9)观察n逐步增大时程序的运行时间。输入格式:输入给出正整数n(<10)。输出格式:输出1到n的全排列。每种排列占一行,数字间无空格。排列的输出顺序为字典序,即序列a1,a2,…,an排在序列b1,b2,…,bn之前,如果存在k使得a1=b1,…,ak=bk并且ak+1<bk+1。输入样例:3输出样例:123132213231312321我只原创 2020-08-18 15:29:52 · 4656 阅读 · 0 评论 -
进阶实验1-3.1 两个有序序列的中位数 (25分)
进阶实验1-3.1 两个有序序列的中位数 (25分)已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数。有序序列A0,A1,…,AN-1的中位数指A(N−1)/2的值,即第⌊(N+1)/2⌋个数(A0为第1个数)。输入格式:输入分三行。第一行给出序列的公共长度N(0<N≤100000),随后每行输入一个序列的信息,即N个非降序排列的整数。数字用空格间隔。输出格式:在一行中输出两个输入序列的并集序列的中位数。输入样例1:51 3 5 7 92 3 4 5原创 2020-08-16 15:51:35 · 1683 阅读 · 0 评论