![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法刷题
文章平均质量分 52
info_H
这个作者很懒,什么都没留下…
展开
-
《编程珠玑》第二章的三个问题
2.1 三个问题A. 找出不在文件中的32位整数当内存足够时可以直接在内存中维护位向量,有对应位是否为1表示是否出现了对应整数。当内存只有几百字节时可以考虑将位向量分段,每次读一遍顺序文件正确设置对应位,位向量的每个段都存入外部文件。B. 循环左移假设原向量为a,循环左移前后元素的索引具有以下对应关系:01…i-1ii+1…n-1n-in-i+1…n-101…n-i-1可以另外使用一个数组装循环左移后的向量,但是如果限制内存只有几十个字节,我们将原创 2021-02-09 22:30:39 · 180 阅读 · 0 评论 -
codeup 由二叉树的先序序列构造一棵树
#include <iostream>#include <map>#include <queue>#include <algorithm>#include <cstring>/* run this program using the console pauser or add your own getch, system("pause") or input loop */using namespace std; struct Nod原创 2021-02-06 16:53:19 · 133 阅读 · 0 评论 -
编程珠玑第一章课后题9——第一次访问向量项时初始化为0
编程珠玑第一章课后题9——第一次访问向量项时初始化为0此题第一眼看上去好像无解,无论怎么想都是使用某个标志标识向量项是否是第一次被访问,但是无论用什么标识都有可能未初始化前就已经为对应的值,然而答案给了一个很神奇的方法,使用两个数组from,to和表示当前访问元素个数的变量top。工作原理假定向量为data,给定向量项的索引i,如果from[i]<top并且to[from[i]]=i则data[i]已经被初始化,否则没有。当第一次遇到索引i时,from[i] = topto[top] = i原创 2021-02-06 11:19:22 · 142 阅读 · 0 评论 -
PAT-A1049解题报告
题目大致意思是要求出1~N中数出现的1的个数。有种很直接的办法就是枚举1~N中的数,统计每个数共有多少位出现1,最后把结果累加起来。但这种办法在数据量大时用时过长,我们可以换个角度思考,把会被记录到总数的1按照位进行划分,统计第i位为1的在1~N中数字的个数,把得到的结果累加起来,就能得到1~N中数出现的1的个数。举例令N = 30710,从第一位开始统计每一位为1时数字的个数。第一位为1时为了不超过N,第一位的前面四位可以取0000,0001,...,3070,如果取3071就会得到30711超原创 2020-09-01 22:21:28 · 127 阅读 · 0 评论 -
抛弃旧有链表思维解决PAT-A1074
PAT-A1074不同于真正的链表,算法笔记上提出了一种静态链表来模拟实际链表,对于解题速度、准确性都有很大帮助。然而受限于原来链表思维,在解决有关链表的题目时虽然使用了静态链表,但解决问题的方式与使用实际链表时并无区别,这样导致解题准确度、速度依然很慢。这篇文章记录自己实现思路与题解思路的区别,以加深自己对静态链表的掌握。旧思路开一个数组作为静态链表,读入数据,初始化链表从头结点开始遍历链表,记录有效节点数量用一个双层循环,外层循环模拟按照k划分的每一组,内存循环用于实现链表逆置原创 2020-09-01 22:17:49 · 123 阅读 · 0 评论 -
PAT-A1093-解题报告
题目略,大致意思是要从一个只含P,A,T三种字符的字符串中找出为PAT的子串,此处子串的每个字符不要求在原字符串中连续出现,只要求先后顺序不变。初始想法是对于字符串中每个P统计其之后的AT的个数,也就是为每个字符A记录该字符后T的个数,从左到右遍历一遍数组,碰到P就维护计数器sum,从该位置开始扫一遍数组,碰到A就将该字符后T的个数累加到sum。很显然,这种方法的复杂度是O(n2)O(n^2)O(n2),遇到大量数据时就会超时,看了题解后豁然开朗,下面就讲讲高效题解的思路。思路有一个字符串a1a2.原创 2020-08-14 17:19:40 · 169 阅读 · 0 评论 -
PAT-A1010解题报告
PAT-A1010解题报告第一遍做这道题时就有了很朴素的想法,先把已知进制的数转换成10进制,再对未知进制进行二分。但是提交后发现很多测试点没有通过,仔细看了《算法笔记》后才发现有很多细节没有把握好,在这里就记录下我的解题过程,为后来者填坑。思路题目要求找一个未知进制,满足N1=N2N_1=N_2N1=N2,只需把二者都转换成10进制进行比较。假设N2N_2N2的进制未知,能够很容易地推出,N2N_2N2的大小随着进制的增加而增加,这样我们就能二分处理N2N_2N2的进制,找到一个使等式成原创 2020-08-13 14:31:45 · 214 阅读 · 0 评论