![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
PAT
青春苦瓜
这个作者很懒,什么都没留下…
展开
-
1098 Insertion or Heap Sort (25 分) 1089 Insert or Merge (25 分)各种排序特点整理总结
其实归并排序和插入排序为了做题简单可以直接用sort函数代替。插入排序的特点是:b数组前面的顺序是从小到大的,后面的顺序不一定,但是一定和原序列的后面的顺序相同~所以只要遍历一下前面几位,遇到不是从小到大的时候,开始看b和a是不是对应位置的值相等,相等就说明是插入排序,否则就是堆排序啦~插入排序的下一步就是把第一个不符合从小到大的顺序的那个元素插入到前面已排序的里面的合适的位置,那么只要对前几...原创 2019-11-30 17:10:29 · 112 阅读 · 0 评论 -
1143 Lowest Common Ancestor (30 分)链表里跑LCA
朴素做法:给定了先序 先序排个序得到中序 然后建树 然后LCA就行了LCA可以有两种:一种是当普通二叉树来跑,另一种就是在BST里跑普通二叉树LCA:Tree lca(Tree tree,int a,int b){ if(!tree||tree->data==a||tree->data==b) return tree; Tree l=lca(tree->le...原创 2019-11-22 16:39:11 · 104 阅读 · 0 评论 -
判断是不是完全二叉树的几种方法
我一开始的错误方法(修正后可用):层序遍历把遍历到的第i点赋值idx ,都赋值了以后再次层序遍历看看某个点的左右孩子节点除以二是不是等于他的idx但是 有一个反例:一共两个点,根节点1 1无左孩子 有右孩子2 满足上面方法但是不是完全二叉树所以在判断的时候需要区分一下左右孩子 左孩子/2,右孩子减1再除以二方法二:层序遍历的时候给每个节点的左右儿子标上号(当前 * 2,当前 * ...原创 2019-11-22 14:24:04 · 689 阅读 · 0 评论 -
1021 Deepest Root (25 分)树的直径变形
题意:问给定的图是不是树选定不同的为树根时 树的高度是不同的,求树的高度最大时的树根(不唯一就升序输出)思路:先并查集判连通域 ,不是树就Error是树:一开始傻了 以为只要度为1的点 就一定是满足题意的点结果不是:如图那就考虑树的直径做法任选一点开始DFS,把最大高度的点放入集合A(因为可能不唯一)然后从A中任选一个点继续DFS,把最大高度点放入B然后A+B去重排序输出!...原创 2019-11-21 17:38:06 · 110 阅读 · 1 评论 -
1049 Counting Ones (30 分)思维
想麻烦了,想递归做来着 后来感觉很麻烦 就学了下大佬们的简单做法思路:考虑每一位的贡献对于当前的一个位now他的贡献肯定是由她左边的数left+右边的数right决定考虑now的值如果now为0,那么他是1的情况 只能由左边从0到left-1得来,同时右边的数有p种变化,一会再说p是啥所以这一位的贡献就是left * p如果now的值为1,在0的基础上 还增加了now为1时 右边的...原创 2019-11-19 16:15:37 · 78 阅读 · 0 评论 -
1119 Pre- and Post-order Traversals (30 分) %%%%%%%%%
这个题把我这菜鸡治的服服帖帖!题意:给定先序和后序问中序是否唯一并输出其中任意一个中序序列思路:首先知道为啥没有中序序列不能为以确定一颗树的原因:对于先序序列,某个根节点右边都是(这个都是并不完全是从他到结尾的意思)他的孩子节点,我们选定他紧挨着右边的这个点,那这个点肯定就是他某个子树(不确定左右)的根节点root2,root2右边的所有点(所有定义同理)我们称为集合S1,然后再去看这个...原创 2019-11-18 21:13:32 · 123 阅读 · 0 评论 -
先序+中序 中序+后序得到树的确定形状
int pre[maxn],in[maxn];Tree build(int len,int pre[],int in[]){ if(len==0) return NULL; Tree temp=new node; temp->data=pre[0]; int i; for(i=0;i<len;i++) if(in[i]==pre[0]) break; te...原创 2019-11-17 15:26:20 · 119 阅读 · 0 评论 -
1099 Build A Binary Search Tree (30 分) 只得22分的原因
自己想了个比较麻烦的做法:先用队列存下输入的各节点关系然后建图 过程:每次从队列pop两个点作为当前的点的子节点 如果子节点有不为空的则继续递归建立但是这样就用不到人家给的序号了 只需要考虑-1和非-1;这个时候题目题意输入也没说清楚其实应该加上一句第i个输入代表第i个节点的子节点建图完成, 开始填数判断当前点左边有几个点 右边有几个点 递归建立。最后层序输出100行 22分 ...原创 2019-11-17 13:39:53 · 86 阅读 · 0 评论 -
1103 Integer Factorization (30 分)dfs+剪枝
没啥好说的感觉自己剪枝已经到极限了可还是T后来想了想,我的垃圾思路是每次都得从头到尾遍历一遍正解是从最大开始判断当前数字放还是不放,所以不用从头到尾遍历 也不用判断sum一样时候字典序大小T了的垃圾代码:#include<iostream>#include<algorithm>#include<string.h>#include<map&g...原创 2019-11-15 12:18:11 · 125 阅读 · 0 评论 -
1068 Find More Coins (30 分) 01背包求字典序最小路径
题意:用n个硬币买价值为m的东西,输出使用方案,使得正好几个硬币加起来价值为m。求字典序最小方案思路:一开始看着m只有100,暴搜结果T了一个1分的测试点。然后dp记节点+dfs跑字典序最小路径 结果T了个4分的测试点…太菜了啊 最后这题还是看了题解解释看注释#include<iostream>#include<algorithm>#include<st...原创 2019-11-12 21:12:11 · 143 阅读 · 0 评论 -
C++ 优先队列存放自定义类型的指针时自定义优先级失效的解决方法
当 C++ 的 std::priority_queue 存放的是自定义类型的指针时,我们自定义的优先级比较方法,比如在自定义类型内部重载 < 运算符等方式,优先队列的优先级将会发生错误。解决方法是使用 Compare 代替#include <queue>/* 自定义类型 */class Node{public: int value; int prior...原创 2019-11-12 19:06:46 · 1473 阅读 · 2 评论 -
1038 Recover the Smallest Number (30 分) 巧做字符串排序
我哭了我真的菜哭了写了两个小时最后还差一个2分的测试点死活debug不出来网上一搜题解发现别人二三十行解决思路虽然一样但是做法千差万别我跟个憨憨一样慢慢模拟菜鸡的28分垃圾代码#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#includ...原创 2019-11-09 10:56:58 · 109 阅读 · 0 评论 -
PAT 1096 Consecutive Factors
题意:给定一个n,让你分解成一些连续数的乘积,求连续整数个数最多的方案,并输出这些连续数,如果有多种最大连续数相等的方案,输出第一个数最小的方案。思路:只需从2~根号n遍历连续整数的第一个,求此时n能被最多多少个连续整数的乘积整除,同时记录对应连续整数的第一个数和最多个数#include<iostream>#include<algorithm>#include&...原创 2019-09-21 09:58:49 · 97 阅读 · 0 评论 -
PAT 1031 Hello World for U (20 分) 模拟
题目大意:用所给字符串按U型输出。n1和n3是左右两条竖线从上到下的字符个数,n2是底部横线从左到右的字符个数。要求:n1 == n3n2 >= n1n1为在满足上述条件的情况下的最大值分析:假设n = 字符串长度 + 2,因为2 * n1 + n2 = n,且要保证n2 >= n1, n1尽可能地大,分类讨论:如果n % 3 == 0,n正好被3整除,直接n1 ==...原创 2019-09-19 19:26:16 · 162 阅读 · 0 评论