算法
文章平均质量分 69
唐流雨
这个作者很懒,什么都没留下…
展开
-
Java实现红黑树
红黑树定义;Java实现红黑树原创 2021-03-23 16:11:50 · 87 阅读 · 0 评论 -
手写三层原生神经网络
前言最近看了不少神经网络相关的视频,感觉有必要自己推导并实现一下简单神经网络的整个算法流程来加深理解。以下阐述均为个人理解,可能存在错误,望指正。神经网络训练流程大致分三步:前向传播——>计算梯度——>更新参数梯度的计算是手动推导过程中最为复杂的一部分,本人在编写神经网络时,采用向量化的形式编写,并且计算也是采用向量形式进行计算,这样做会使表达式更加简洁,但却不容易得出一个普遍的规律。此外本文不建议一点神经网络基础都没有的人来看。网络设计建立 6*3*3*1的神经网.原创 2020-12-14 22:44:44 · 239 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1139 First Contact (30分)
其实代码就不用看了,我写的很菜。主要是看思路,相信大家不会说一点思路没有,大体的代码都编的出来,但是可能漏掉了要点。下面列举题干的坑:(1)题目中并没有说A和B是朋友,B和C是朋友就能推出A和C是朋友。千万不要先入为主,如果你是这种思想的话,你可能就会用并查集去写了,实际上这就是一个简单的图而已。(2)0000这个编号是可能存在的。(严格来说0既不是正数,又不是负数,所以他题目就不严谨,但...原创 2020-02-13 18:19:00 · 444 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1117 Eddington Number (25分)
解题思路简单,哪怕暴力解都不会超时。但是有个坑,他自己题目没说清楚。原题是:"Eddington number",E-- that is, the maximum integerEsuch that it is forEdays that one rides more thanEmiles.翻译:“爱丁顿数”,E-即最大整数E,以使E天骑行超过E英里。这个并不是要刚好E天...原创 2020-02-12 15:51:52 · 167 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1115 Counting Nodes in a BST
1、建二叉排序树2、层序遍历,我是把每层的节点数记录下来,最后输出倒数两个ps:当n=1时,输出“1+ 0= 1”#include <iostream>#include <vector>#include <queue>using namespace std;struct node{ node* lchild; node...原创 2020-02-04 15:50:31 · 147 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1085 Perfect Sequence
最后一个测试点过不了,是因为m*p可能超过了int的范围,导致判断条件出错,所以将数据类型改成longlong就好了。#include <iostream>#include <vector>#include <stdio.h>#include <algorithm>#define maxn 100001using namespace...原创 2020-02-04 14:45:49 · 156 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1107 Social Clusters
解题方法:并查集。把爱好当成并查集元素。对于每个人当爱好只有一个时,不做任何操作。当爱好大于一个时,两两进行并查集的合并操作。遍历完后,就可找出,每个cluster的father (father[i]=i)但是有一个问题:我们为了方便编码,会开辟father[1001] 大小的数组,来记录第 i 个元素的father,初始化时 father[i] = i,可能爱好 i 并不存在,但是...原创 2020-02-01 16:41:59 · 117 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1103 Integer Factorization
回溯就可以解,记一个坑,在计算a的n次方时,如果你需要的是整数,最好不要用pow,而是自己写一个。我的编译器使用pow的时候,如果传的值不是double类型的而是int类型的数值,会产生比较大的误差,如10的2次方可能的出的结果就是99,而非100。还有,自己写的pows不会超时,而使用pow函数会有个测试点超时。#include <iostream>#include...原创 2020-01-31 16:36:45 · 159 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1051 Pop Sequence
思路:遍历每个序列,遍历时维护一个值maxn(已遍历过的数中的最大数),maxn初始值为0。对于每个数字 i:1、若i 大于maxn,则往栈中push 【maxn+1,i】之间的数(端点值要取),接下来判断是否超出容量,超出则不能构成该序列。若未超出,则pop栈顶的值(即 i),同时 令maxn=i。2、若 i 小于maxn,则查看栈顶的值是否等于 i ,不是则不能构成该序列,是则p...原创 2020-01-31 14:23:44 · 113 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1029 Median
输入不要用cin,用scanf,不然会超时。真的要吐血了,没想到是这个点......使用cin输入数据时最后一个测试点超时,使用scanf直接89ms过,题限是200ms在数据量较大时,用scanf能明显减少时间...不过大部分题超时可能还是因为处理方法不对这题也不难,使用归并的思想就能解决,主要还是超时的坑,另外下面还有一份我写的使用二分的代码(之前以为超时是方法不对,所以就写了二分)...原创 2020-01-26 20:18:52 · 131 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1026 Table Tennis (30分)
这题有点坑,主要是题意理解上,编码都比较简单。先说明下题意,一个球馆有n个桌子从1到N编号,其中有k台vip桌子。随之,用户也有普通和vip之分。每次用户来时给其分配编号最小且可用的桌子,如果没有则等待。附加条件:1、每个人玩的时间不能超过2小时,超过则压缩成2小时(ps:PAT上好像有个银行排队的题,也是说服务时间不超过多少,不压缩能过,但是本题必须要压缩,不然会有个用例过不了)2、...原创 2020-01-26 17:02:18 · 223 阅读 · 0 评论 -
PAT甲级(Advanced Level) Cars on Campus (30)
思路:(1)将vector先按plate_number排序,若相同则按时间大小排序,这样可以使一个plate_number的记录按时间顺序排在一起(2) 遍历vector,若前一条数据的plate_number与后一条相同,且前一条是in后一条是out,则为合法数据 我设了一个数组cars,cars[i]表示第i秒,停车场内的车数 那么对于一对合...原创 2020-01-16 19:12:54 · 122 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1017 Queueing at Bank
记一个坑,银行上午8点到下午5点关门,我的认知是:5点以后来或者5点后还不能得到服务的人要从总人数里删去。然而,这道题它认为5点前来的人都计入总的服务了的人数,哪怕你等到5点后才得到服务,但是5点后来的就不行。#include <iostream>#include <stdio.h>#include <algorithm>#include <...原创 2020-01-15 16:45:59 · 125 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1013 Battle Over Cities (25分)
题意:一个连通图,删除一个结点后,至少连几条线可以将图再次还原成联连通图。显然,两个连通分量要一条,三个连通分量要两条,....N个连通分量要N-1条。深度优先搜索最外层的循环可判断到底有几个连通分量。#include <iostream>#include<stdio.h>#define maxn 1001using namespace std;int G[m...原创 2020-01-14 15:23:03 · 105 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1006 Sign In and Sign Out
1、使用sscanf,可节省对字符串的分割的代码2、注意scanf读字符串时,是以空格和回车结尾的3、将signIn和signOut时间转化成秒,然后一遍循环,找出signIn最小的id和signOut最大的id#include <iostream>#include <string>#include <algorithm>#include &...原创 2020-01-04 17:52:06 · 123 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1005 Spell It Right
注意用字符串接收输入。易错测试用例:输入:0 输出:zero#include <iostream>#include <string.h>#include <string>#include <stack>#include <string>using namespace std;string number;int...原创 2020-01-04 17:27:01 · 85 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1004 Counting Leaves
1、不是二叉树,存储方式用到了代码中的结构体。2、因为结点编号在100以内,可以让第i个结点就存储在tree[i]中,方便查找3、方法:建树然后层序遍历,遍历时记录layer,和当层无叶子结点的结点个数注意:这题题目有个:The input ends withNbeing 0. That case must NOT be processed.我以为输入的N为0时,不进...原创 2020-01-04 17:09:53 · 105 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1076 Forwards on Weibo
BFS遍历+记录layer,比较简单...#include <iostream>#include <stdio.h>#include <queue>#define maxn 1010using namespace std;int MAP[maxn][maxn] = {0};bool visited[maxn];int n,l,k;void...原创 2020-01-03 12:04:52 · 73 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1053 Path of Equal Weight
建树建好后,使用DFS就能找到答案,另外题目要求结果路径的最后一个结点一定要是叶子结点,最后得到结果后,简单的排下序就行了。#include <iostream>#include <stdio.h>#include <algorithm>#include <vector>using namespace std;struct node{...原创 2019-12-25 21:57:23 · 81 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1052 Linked List Sorting
注意:给出的结点中,有的结点可能不再链表上,所以要遍历判断一下。另外,所有的结点可能都不在链表上,这时候要输出“0 -1”ps:“0 -1”这个有点流氓,当时做的时候知道会存在所有结点都无效的情况......但是就是不知道如何输出#include <iostream>#include <stdio.h>#include <algorithm>...原创 2019-12-23 21:00:05 · 114 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1060 Are They Equal
这题可以分两部,先求出要保留的数字部分,再求出指数部分,另外浮点数作为字符串处理时,一定要考虑前导0和末尾0,例如:000.00,0099.800。给出一组比较容易错的数据:4 0000 0000.00 // YES 0.0000*10^0#include <iostream>#include <stdio.h>#include <string>...原创 2019-12-22 22:23:49 · 69 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1069 The Black Hole of Numbers
#include <iostream>#include<stdio.h>#include<algorithm>using namespace std;bool cmp(int a,int b) //降序{ return a > b;}int getNumber(int a[],int len) //从数组取出数字{ i...原创 2019-12-19 21:26:59 · 103 阅读 · 0 评论 -
PAT (Advanced Level) Practice 1002 A+B for Polynomials
题意:给出两个多项式,要求合并。算法就是简单的归并,题目保证输入是按指数从大到小输入(自己排序检测过,加不加都能过),但是要额外注意一点:就是在合并时,系数会出现为零的情况,此时该项要舍去,不然样例不能全过。代码:#include <iostream>#include <stdio.h>#include<algorithm>using names...原创 2019-12-19 09:48:19 · 72 阅读 · 0 评论 -
PAT 乙级B1040 有几个PAT?
暴力必超时。思路很简单:循环遍历字符串数组,对于每个‘A’,其能组成的PAT个数,取决于左边的'P'的个数和其右边的‘T’的个数,乘起来累加求和即可得出最终解。该算法两次遍历数组,复杂度为O(n),耗时6ms。第一次遍历是要求出数组中T的个数,第二次遍历就是正式的计算。计算方式:如果是‘P’,那么P的数量(最开始是0)加1, 如果是‘T...原创 2019-12-17 21:57:26 · 76 阅读 · 0 评论 -
POJ 1011 DFS+剪枝
题目是英文的翻译过来大概是这个意思:现在有一些长度相同的棍子,将这些棍子随意切割成n个长度不一的棍子。题目会给出n和这n个棍子的长度,求原来棍子长度的最小值。也可以反过来说,给你n个棍子要你将其拼接成几个相同长度的棍子,求其长度的最小值。这道题要采用DFS + 剪枝,单纯使用DFS会超时。下面讲解剪枝:1、降序排序这没什么好说的2、n个棍子是由原来的棍子切割而成,设max是n个棍...原创 2019-09-17 19:27:08 · 203 阅读 · 0 评论