自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 1151 LCA in a Binary Tree (30分)

给定某个二叉树的中序遍历和前序遍历,求给定值对的最深共同父节点。约等于1143 Lowest Common Ancestor,还是可以不建树(真的不想写树),区别在于1143给的是BST的前序遍历,本题只说了二叉树,因此就不能通过值的大小来判断是否在某节点的同一边。但是可以把中序遍历的顺序作为判断的标准,按中序给节点做上标记,判断时根据标记判断,之后的处理方式就和BST一样了。如果值a在中序遍历...

2020-03-31 17:28:46 46

原创 1143 Lowest Common Ancestor (30分)

给定一个BST的先序遍历序列和m个数值对,求每个数值对的深度最大的公共父节点。可以不建树,顺序查找先序遍历的那个数组。查找值是否存在树中,若两个都存在则开始查找,不存在则输出不存在。先序遍历中根节点总是最先访问,因此顺序查找序列中最先满足val1<currval<val2或val1>currval>val2的currval就是LCA。当currval和val1或val2其...

2020-03-31 15:38:24 84

原创 1115 Counting Nodes in a BST (30分)

坑点在于相等的节点是存在左子树的……在给出来的用例里面放左子树右子树答案都是一样的思路就是顺序建树插入节点,最后再统计最大层数和每层的节点数,最后输出。#include <stdio.h>#include <vector>#include <algorithm>using namespace std;int m,n;struct Node{ ...

2020-03-31 14:07:21 62

原创 1147 Heaps (30分)

跟1155 Heap Path约等于一样,把深搜改成后序遍历。#include <stdio.h>#include <vector>#include <algorithm>using namespace std;int m,n;vector<int> post,arr;void postorder(int curr){ if(...

2020-03-31 13:12:12 96

原创 1155 Heap Paths (30分)

打印所有到叶节点的路径,要求先走右分支再走左分支,判断是大顶堆还是小顶堆或不是堆。深搜路径,然后判断堆的放在深搜里面感觉太繁杂了,就放到main里。判断改状态时应该不能加等号,两数相等时不能改变堆状态(虽然用例没有扣这点……加不加等号都能过)#include <stdio.h>#include <vector>#include <algorithm>...

2020-03-31 01:35:37 49

原创 1064 Complete Binary Search Tree (30分)

这个跟那个1099 Build A Binary Search Tree也差不多,为了方便就用数组写了,按照结构赋好左右节点的静态指针(左指针为当前node下标×2+1,右指针为当前node下标×2+2),然后这样按照n全赋值完最后一层是多出来的,还要加初值的判断来确定这个点是不是有效节点。初始化好结构之后中序遍历,获得中序遍历的下标数组。输入的值排序,然后根据下标数组填充树,最后顺序输出即可(...

2020-03-30 23:41:22 66

原创 1099 Build A Binary Search Tree (30分)

简单粗暴,先中序遍历一下二叉树,保存对应的数组下标和值。如果是有序的二叉检索树中序遍历应该是一个非减的数列。把值排序得到有序的数列,然后按着下标和排序后的值重新给原有的树赋值,最后层序遍历输出。leetcode上有个题跟这个比较像,99. 恢复二叉搜索树(好吧几乎一样,一个数组一个用指针),题解里有常数空间的解决方法(Morris),可参考#include <stdio.h>#i...

2020-03-30 22:49:42 107

原创 1016 Phone Bills (25分)

读入每条记录,输出每个用户的账单。需要按用户名字典序排序。将每条记录存储到对应用户的节点中,根据时间顺序排序,选择相连的两条分别为online和offline的记录输出。计算话费的时候注意有可能是跨天的。时间的读入格式是月:日:时:分。最后筛选有效记录和输出如果分开会超时,所以就并一起了,加个flag判断该用户是否存在有效记录。写这种题总是很累,老是要扣很久的细节,瘫#include <...

2020-03-26 20:18:04 121

原创 1080 Graduate Admission (30分)

给定n个学生的成绩该生的k个志愿院校,m个学校的招生人数,求每个学校的录取情况。排名是按照总分排名,总分相同时比较高考成绩。(虽然final grade是说两个成绩的平均值,但是直接比较总分也一样,算平均分还可能有浮点什么的问题)如果某个学生被某意向院校录取,那和他同分的学生也必被录取无论该院校名额是否已满。先读入,然后给学生排序,查看每个学生的意向院校,如果该院校名额还没满或者满了但是最后一...

2020-03-25 23:32:19 154

原创 1111 Online Map (30分)

单源最短路径,给定每条路的两个端点、长度、时间、是否单向,求给定起点到给定终点的最短路径长和最少时间路径长。若最短路径不唯一则输出时间最少的路径,若最少时间路径不唯一输出途径节点最少的路径。用dijkstra走两遍,一次求最短路径一次求最短时间。按条件更新路径。vector存储起始点到当前点的当前最短路径。比对两个vector,如果一样就一起输出,不一样就分开输出。#include <s...

2020-03-25 00:04:37 82

原创 1062 Talent and Virtue (25分)

输入排序再输出的一个题。反正是读题要仔细,关键点是四类人的判定和最后输出的排序。output和input讲的输出格式和判定方法都和题干有点不一样。virtue和talent都高于H时为sage,virtue高于H,L<talent<H时为nobelman,剩下的virtue>talent为fool,其它的为smallman,两项有一项小于L的都不算进总数中。开四个vector分别...

2020-03-24 21:57:15 128

原创 1070 Mooncake (25分)

给定月饼的数量和价格和所需的数量,求最大利润。计算单位数量的价格排序,最后计算的时候不用这个(浮点计算可能会有问题,改成按比例计算之后牛客网的用例全都通过了)pat里的第二个用例应该是月饼数量带小数,把amount也改成浮点就过了。#include <stdio.h>#include <algorithm>#include <math.h>usin...

2020-03-24 02:19:24 230

原创 1068 Find More Coins (30分)

给定一些数字和所求和M,给出序列最小的数字,他们的和恰好等于M。题目叫find more coins其实隐含了同样价值的一堆硬币数量越多那它的序列就应该越小的意思,但是呢还有1 3 5和2 3 4这样的序列,所以还是得比大小。将给定数字降序排列,然后循环更新dp数组。dp数组下标值表示该元素对应vector的各元素和。但是有些值是没有对应的组合的,所以加一个判断是否为有效元素。因为dp存的是...

2020-03-24 01:49:38 441

原创 1057 Stack (30分)

题目大意是,输入栈的命令push和pop,再实现一个寻找中位数的函数peekMedian。刚开始用vector+sort来做(必然超时),用大小顶堆又不好实现删除元素,所以还是手动写二分法。vector中insert/erase元素时的迭代器指向的是待插入/删除的位置。所以用同个函数findpos时,查找待插入的位置的返回值需要+1才是真正要插入的位置(直接返回值left是小于它的值,坐标le...

2020-03-23 15:39:09 228

原创 1028 List Sorting (25分)

排序,注意当名字/分数相同时按照id小的在前。快速做一道然后去睡觉#include <stdio.h>#include <string>#include <string.h>#include <algorithm>#include <vector>using namespace std;struct Node{ ...

2020-03-22 03:13:03 38

原创 1004 Counting Leaves (30分)

题目意思约等于给定一个树,求叶节点数。测试用例其实还是蛮宽松的,显然不考虑族内通婚(……)所以也不用记录某个节点是否被访问到了。因为是按每层输出,所以每次level变化的时候都要输出。如果3和4过不了可以考虑下是不是中间有多层全是非叶节点的时候没有正确判断。单个根节点的情况也要考虑到。#include <stdio.h>#include <string>#inclu...

2020-03-20 22:51:37 108

原创 leetcode295.数据流的中位数

剑指offer面试题41 / leetcode295.数据流的中位数最自然的想法一是每次sort后下标取值,但是这样会超时。其次想到BST和AVL,但是自己写实在是太麻烦了(真考到也没时间写)每次sort会超时,用优先队列来做。sort的时间复杂度为nlog(n)。priority_queue是用堆实现的,每次插入并向上调节的时间复杂度是log(n)。(因为堆深度最多为log(n),最多向上调...

2020-03-19 20:15:48 91

原创 leetcode32. 最长有效括号

换换口味做一下leetcode的题最最普通的版本,时间和内存消耗都相对比较大。从头到尾扫描vector,合并相邻或中间隔着成对括号的左和右,当vector长度不变时计算所有标记成对的节点的数目,即最长子串。class Solution {public: struct Node{ int state=0;//0为成对,-1为左,1为右 int num=0...

2020-03-19 19:03:19 80

原创 1031 Hello World for U (20分)

水水题 放松心情今日废话小日记:文档好多 总是写不完#include <stdio.h>#include <string>#include <string.h>using namespace std;int main(){ string str; str.resize(85); scanf("%s",&str[0]...

2020-03-19 15:37:28 41

原创 1022 Digital Library (30分)

输入图书信息然后根据出版社、作者、年份、关键字等信息查询。还是比较常规的题,就是输入存储然后查询,字符串读入和处理麻烦一点。分割字符串用的stringstream。出于常规的思维把keyword map了一下。如果用例很大的话所有string的项都应该做map。(有点数据库内味了)卡到的点有:每个block读id后要带回车,不然下一行getline读到的就是回车不是有效字符串查询里面在数...

2020-03-19 15:18:36 50

原创 1017 Queueing at Bank (25分)

跟1014 Waiting in Line是比较像的,也是个排队的问题。不同的是黄线内一个窗口就一个人,求所有顾客的平均等待时间。定义顾客节点包括到达时间和服务过程时间。窗口只用存一个最近完成服务客户的结束时间。用这个窗口时间和顾客的到达时间做比较,判断是否加等待时间和更新该窗口时间。用队列和vector或者数组都行,对于存储顾客节点的数组排序只有一次,不涉及动态的改变。其实这个题,每个顾客时间...

2020-03-19 13:23:50 44

原创 1045 Favorite Color Stripe (30分)

是一个最长不下降子序列的问题。关于最长不下降子序列的算法推导见算法笔记432页。简要的说一下思想就是使i从0-n-1遍历整个所给序列a,计算以i位置为最终子序列尾元素时的最大序列长度。dp[i]记录以a[i]为尾元素时的最长子序列长度。使j遍历0-i,如果以j为尾元素的子序列加上i位置的元素能保持子序列不下降且长度比原先的子序列更长,就更新记录的dp[i]。初始化dp[i]=1,即将每个单独的元素...

2020-03-17 13:09:29 191

原创 1024 Palindromic Number (25分)

还是一个水题,问题没啥,能想到数值计算会超界就行。(虽然但是 还是做个记录8)string加减的时候记得要减去48。用数组/vector应该也行,反正algorithm里实现了reverse的。今天的废话小日记2:网课作业好多啊啊啊#include <stdio.h>#include <string>#include <string.h>usin...

2020-03-16 22:24:24 61

原创 1012 The Best Rank (25分)

比较水吧这个题,需要注意的是当有多个人同分时这些人的排名都等于最小的排名,所以取排名的时候根据分数取不根据名字找。写几个比较函数分别sort然后记录最高排名输出,没啥好说的。#include <stdio.h>#include <algorithm>#include <vector>#include <string>using names...

2020-03-16 19:49:48 102

原创 1013 Battle Over Cities (25分)

题目的意思是先给定一些边,然后删除某个点,计算使剩下的点联通所需的边数。用并查集做,跳过删除点对应的边初始化father数组,然后计算根结点个数。最后-3是因为,跳出for时的i对应的father[i]!=-1,即此时的i已经不是根结点,-1;连接n个不相连的集合需要n-1条边,再-1;根结点中还有一个点是删除的点,所以总共需要-3。今天的废话小日记:因为疫情的原因至少有两个月没喝奶茶了 点了...

2020-03-16 18:10:58 131

原创 1014 Waiting in Line (30分)

主要思想其实没啥花样,还是按照题目的意思来。维护一个一个双层vector来模拟黄线内情况,保证它的大小不大于m×n。当读取的客户id小于m×n时直接选择size最小的vector push;大于m×n时先找所有vector中剩余时间最少的那个node,记录剩余时间,然后把所有的node都减去记录的剩余时间,删除所有time<=0的node(其实也不会有小于零的情况),这样vector就有空位...

2020-03-16 01:18:25 69

原创 今天开始记录一下PAT刷的题8

断断续续写了十几题了 还是做个记录吧(没事找事1030 Travel Plan (30分)跟1003Emergency差不多 一个加点权一个加边权 在那个基础上改了一点 都是dijkstra 还是挺繁琐 但是能用就行/* 2020/03/14 PAT A1030 Travel Plan*/#include <stdio.h>#include <algo...

2020-03-14 14:57:01 139

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除