![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法题
大三废物每天写blink总结,球球关注
这个作者很懒,什么都没留下…
展开
-
6-12 二叉搜索树的操作集 (30 分)
想法: 花了两个多小时把这道题写出来了。。 我自己写的代码有BUG,后来就去看了浙大网课,课件上的代码真是太简洁了!我终于能体会到什么是代码的艺术! 虽然递归的方式增加了时间复杂度,可是真的太美了。树的递归思想我理解了好久,现在有了一点理解。 俩小时,还是挺值的! 题目: 本题要求实现给定二叉搜索树的5种常用操作。 函数接口定义: BinTree Insert( BinTree BST, ElementType X ); BinTree Delete( BinTree BST, Eleme原创 2021-09-17 21:30:46 · 37 阅读 · 0 评论 -
1. 两数之和
想法: 这道题很简单哈,我用了On的时间复杂度。 然后我从中学到了sort函数的cmp函数一定要设置为静态函数哈,不然会报错。 以及vector<struct>也是可行的哈。 题目: 给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 示例 1: 输入:num...原创 2021-09-16 00:04:03 · 53 阅读 · 0 评论 -
4. 寻找两个正序数组的中位数
想法: fu****ck,纪念一下leetcode刷的第一道困难题吧,虽然是困难题,但感觉不难,跟中等题差不多。但是我还是花了好多时间写啊,错了好多次,不应该啊啊啊! 原因第一个就是intis_odd=(n+m)%2;写成了intis_odd=(n+m) / 2; 我真服了,什么sb错误 第二个错误是while中的判断条件cnt<(n+m)/2+1错了。 题目 4. 寻找两个正序数组的中位数 给定两个大小...原创 2021-09-14 16:42:42 · 44 阅读 · 0 评论 -
524.通过删除字母匹配到字典里最长单词
想法: 朋友们,&&和||的运算优先级是不一样的!! ||的优先级比&&低!看我打星号的语句,就是这里出了问题=-= 讲点别的,这道题,我看到字典就以为是我没学过的数据结构,看了答案才发现我的思路大致是对的,然后就写出来了。 题目: 给你一个字符串 s 和一个字符串数组 dictionary 作为字典,找出并返回字典中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字典序最小的字符串。如果答案不存在,则返回空字符串。原创 2021-09-14 15:01:58 · 32 阅读 · 0 评论 -
447.回旋镖的数量
想法: 借鉴了马哥的思路,优化至n^2logn的时间复杂度,居然超过了100%的人! 题目: 给定平面上 n 对 互不相同 的点 points ,其中 points[i] = [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的距离相等(需要考虑元组的顺序)。 返回平面上所有回旋镖的数量。 示例 1: 输入:points = [[0,0],[1,0],[2,0]] 输出:2 解释:两个回旋镖为 [[1,0],[0,0],[..原创 2021-09-13 23:54:17 · 39 阅读 · 0 评论 -
15.三数之和
想法: 这个题目。让我学到好多东西 首先,<vector>.size()返回unsign int类型!!!不是int类型 第二,&&运算符有短路功能,即A&B中若A为0就不计算B 第三,就是排序加双指针的算法,有点意思 题目 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例 1: 输入:n原创 2021-09-13 22:13:06 · 40 阅读 · 0 评论 -
2.两数相加
AC代码在最后! 想法: leetcode居然不支持malloc, 所以我学了new。 附上new的用法: new其实就是告诉计算机开辟一段新的空间,但是和一般的声明不同的是,new开辟的空间在堆上,而一般声明的变量存放在栈上。通常来说,当在局部函数中new出一段新的空间,该段空间在局部函数调用结束后仍然能够使用,可以用来向主函数传递参数。另外需要注意的是,new的使用格式,new出来的是一段空间的首地址。所以一般需要用指针来存放这段地址。具体的代码如下: #include <iostr原创 2021-09-13 16:04:44 · 58 阅读 · 0 评论 -
1043 输出PATest (20 分)
想法: 又一遍就AC。。 做这种题目感觉不能学到新东西哇。 题目: 给定一个长度不超过 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。 输入格式: 输入在一行中给出一个长度不超过 104 的、仅由英文字母构成的非空字符串。 输出格式: 在一行中按题目要求输出排序后的字符串。题目保证输出原创 2021-09-12 21:12:04 · 46 阅读 · 0 评论 -
1042 字符统计 (20 分)
想法: 又是一遍过,是题目太简单了吧。 哈哈哈哈哈哈 题目: 请编写程序,找出一段给定文字中出现最频繁的那个英文字母。 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串。字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母,以回车结束(回车不算在内)。 输出格式: 在一行中输出出现频率最高的那个英文字母及其出现次数,其间以空格分隔。如果有并列,则输出按字母序最小的那个字母。统计时不区分大小写,输出小写字母。 输入样例: This is a simp原创 2021-09-12 20:31:28 · 29 阅读 · 0 评论 -
1041 考试座位号 (15 分)
想法: ohhhhhhhhhhh,一遍过! 果然刷了这么多题不是白刷的。 第一次自己写cmp函数,就成功了。 题目: 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。 输入格式: 输入第一行给出一个正整数 N(≤1000),随后 N原创 2021-09-12 20:18:39 · 29 阅读 · 0 评论 -
1040 有几个PAT (25 分)
我的想法: 这道题 很有意思哈,扫描每一个A,包含这个A的PAT数量 = A前面的P的数量*A后面的T的数量。 所以只要遍历一遍,记录下数据就行啦! (我自己没想到这么巧妙的解法,参考了“韩旭051”的博客) 题目: 字符串 APPAPT 中包含了两个单词 PAT,其中第一个 PAT 是第 2 位(P),第 4 位(A),第 6 位(T);第二个 PAT 是第 3 位(P),第 4 位(A),第 6 位(T)。 现给定字符串,问一共可以形成多少个 PAT? 输入格式: 输入只有一行,包含一个原创 2021-09-12 13:56:19 · 53 阅读 · 0 评论 -
1038 统计同成绩学生 (20 分)
想法: 刚开始傻不拉几的做,写了二分查找还是超时。 然后看了别人的,发现如此简单=-= 题目: 本题要求读入 N 名学生的成绩,将获得某一给定分数的学生人数输出。 输入格式: 输入在第 1 行给出不超过 105 的正整数 N,即学生总人数。随后一行给出 N 名学生的百分制整数成绩,中间以空格分隔。最后一行给出要查询的分数个数 K(不超过 N 的正整数),随后是 K 个分数,中间以空格分隔。 输出格式: 在一行中按查询顺序给出得分等于指定分数的学生人数,中间以空格分隔,但行末不得有多余空格。原创 2021-09-11 22:14:19 · 106 阅读 · 0 评论 -
1025 反转链表 (25 分)
想法: 这题必须写两句。首先我感受到了大佬来自智商的碾压,大佬的代码贴在最后。另外就是我做题 太烂了,写的我自己都看不下去,反观大佬的代码,逻辑清晰,思维跳跃,这才是人才。我差的不是一星半点。 这题用了两个多小时,真是太菜了。 坚持下来对自己来说也是有进步吧。 题目 给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后原创 2021-09-11 20:50:45 · 42 阅读 · 0 评论 -
1028 人口普查 (20 分)
感想放在最前面 记一个小错误,测试点三,由于我认为输入(0,10000]个人,就一定会录入数据,但是忘记了数据可能会被过滤掉的情况。 小错误!!注意起来! 题目 某城镇进行人口普查,得到了全体居民的生日。现请你写个程序,找出镇上最年长和最年轻的人。 这里确保每个输入的日期都是合法的,但不一定是合理的——假设已知镇上没有超过 200 岁的老人,而今天是 2014 年 9 月 6 日,所以超过 200 岁的生日和未出生的生日都是不合理的,应该被过滤掉。 输入格式: 输入在第一行给出正整数 N,取值原创 2021-09-04 21:09:22 · 55 阅读 · 2 评论 -
1024 科学计数法 (20 分)
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。 现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。 输入格式: 每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。 输出格式:原创 2021-09-01 17:42:25 · 35 阅读 · 0 评论 -
1020 月饼 (25 分)
月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。 注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。 输入原创 2021-08-31 12:14:22 · 65 阅读 · 0 评论 -
1003 我要通过! (20 分)
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。 得到“答案正确”的条件是: 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符; 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串; 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A原创 2021-08-24 22:06:55 · 34 阅读 · 0 评论 -
6-13 折半查找 (15 分)
给一个严格递增数列,函数int Search_Bin(SSTable T, KeyType k)用来二分地查找k在数列中的位置。 函数接口定义: int Search_Bin(SSTable T, KeyType k) 其中T是有序表,k是查找的值。 裁判测试程序样例: #include <iostream> using namespace std; #define MAXSIZE 50 typedef int KeyType; typedef struct原创 2021-08-24 09:20:23 · 77 阅读 · 0 评论 -
6-7 在一个数组中实现两个堆栈 (20 分)
本题要求在一个数组中实现两个堆栈。 函数接口定义: Stack CreateStack( int MaxSize ); bool Push( Stack S, ElementType X, int Tag ); ElementType Pop( Stack S, int Tag ); 其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下: typedef int Position; struct SNode { ElementType *Data;原创 2021-08-22 17:18:33 · 77 阅读 · 0 评论 -
6-6 带头结点的链式表操作集(20 分)
本题要求实现带头结点的链式表操作集。 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType原创 2021-08-22 15:05:16 · 32 阅读 · 0 评论 -
6-1 单链表逆转 (20 分)
本题要求实现一个函数,将给定的单链表逆转。 函数接口定义: List Reverse( List L ); 其中List结构定义如下: typedef struct Node *PtrToNode; struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */ }; typedef PtrToNode List; /* 定义单链表类型 */ L是给定单链表,函数Reverse要返回原创 2021-07-27 14:55:37 · 474 阅读 · 0 评论 -
6-9 二叉树的遍历 (25 分)
本题要求给定二叉树的4种遍历。 函数接口定义: void InorderTraversal( BinTree BT ); void PreorderTraversal( BinTree BT ); void PostorderTraversal( BinTree BT ); void LevelorderTraversal( BinTree BT ); 其中BinTree结构定义如下: typedef struct TNode *Position; typedef Position BinTre原创 2021-07-29 09:27:55 · 60 阅读 · 0 评论 -
6-11 求自定类型元素序列的中位数 (25 分)
本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第⌊(N+1)/2⌋大的元素。其中集合元素的类型为自定义的ElementType。 函数接口定义: ElementType Median( ElementType A[], int N ); 其中给定集合元素存放在数组A[]中,正整数N是数组元素个数。该函数须返回N个A[]元素的中位数,其值也必须是ElementType类型。 裁判测试程序样例: #include <stdio.h> #define MAXN 10 ty原创 2021-07-27 09:18:06 · 84 阅读 · 0 评论 -
6-10 二分查找 (20 分)
本题要求实现二分查找算法。 函数接口定义: Position BinarySearch( List L, ElementType X ); 其中List结构定义如下: typedef int Position; typedef struct LNode *List; struct LNode { ElementType Data[MAXSIZE]; Position Last; /* 保存线性表中最后一个元素的位置 */ }; L是用户传入的一个线性表,其中ElementTyp原创 2021-07-31 09:26:51 · 30 阅读 · 0 评论 -
6-5 链式表操作集 (20 分)
本题要求实现链式表的操作集。 函数接口定义: Position Find( List L, ElementType X ); List Insert( List L, ElementType X, Position P ); List Delete( List L, Position P ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrToLNode Ne原创 2021-08-21 23:43:27 · 41 阅读 · 0 评论