数据结构
以c++为例,挖一个数据结构的小坑
kylinholmes
这个作者很懒,什么都没留下…
展开
-
C++ STL
C++ STL常用的 STL 头文件如下文章目录C++ STLvectorqueuedeuqesetmapbitsetalgorithmvector简单来说vector是一个动态数组,数组长度可变。和数组一样支持随机访问 [] ,对比数组增加了一些函数:size/emptysize函数会返回vector的元素个数,empty会返回一个bool类型,表示vector是否为空*所有的STL容器都支持这两个方法,含义也相同,后面不再重复给出clear清空vector数组begin/原创 2020-08-14 14:05:42 · 114 阅读 · 0 评论 -
离散化最妙写法
离散化最妙的写法 map<int,int> m; for(int i=0;i<n;i++){ scanf("%d",&x); x = m[x] ? m[x] : (m[x] = ++tot); }原创 2020-07-12 11:36:23 · 180 阅读 · 0 评论 -
来 看 T r i e 吧
来 看 T r i e 吧Trie 念做 try,就是字典树。是一种主要用于字符串快速检索的多叉树结构const SIZE = 1e4+5;bool end[SIZE]int tire[SIZE][26], tot = 1; //假设只有小写字母 void insert(char s[]){ int L = (int)strlen(s),p = 1; for(int k=0;k<L;k++){ int ch = s[k] - 'a'; if(tire[p][ch] == 0原创 2020-06-28 03:03:16 · 176 阅读 · 0 评论 -
数组模拟二叉树
数组模拟二叉树二叉树嘛,仔细想一下。显而易见有以下结论:节点左儿子右儿子1232453674895101161213………n2n2n + 1所以我们可以直接开成数组的形式。因为对于一个i而言,左儿子是2i,右儿子是2i+1假设我们需要N个节点,那需要多大的空间?稍微算一下就知道了 2N - 1自己需要开N个,所有的父节点需要开 N-1个。又因为a[0]是不能用的,所以最少需要开a[2N]。原创 2020-06-28 02:25:00 · 757 阅读 · 2 评论 -
数组模拟实现链表
数组模拟实现链表为什么不写成struct?因为写法麻烦,效率低。体现在每次需要new一个内存,new的过程非常耗时,可能1s的时间会画在new上面直接上代码,看着代码解释好了const int N = 1e5+5;int a[N],idx,head;// 事先申请一块大小为 N 的int类型的内存// idx++ 模拟申请一块内存,idx-1表示链表长度// 这些节点可能 逻辑上相邻,物理上也相邻。int nxt[N];// nxt[i] 记录着i号节点的下一个位置,同理可以写 pr原创 2020-06-28 02:06:38 · 196 阅读 · 0 评论 -
算法竞赛进阶指南练习 0x18
POJ 2823 Sliding Window这个题大方向想到了,但是没想到要删除队尾的元素来维护单调性。后来测试数据的时候发现之前的写法有问题,想了一圈不知道应该改哪里,后来还是去搜了一下别人的思路,发现需要维护队尾的单调性。最后借鉴的标答的代码,写的真的简洁,比其他人的都短好多。除了单调队列,这个是不是还可以用区间dp,线段树。但我觉得可能会超时吧。#include <iostream>#include <cstring>#include <algorithm原创 2020-06-23 20:52:25 · 236 阅读 · 0 评论 -
数据结构 — 栈 和 队列
数据结构 — 栈 和 队列 最简单易懂的教程栈栈就好比是家里的盘子,堆起来的那种。每次拿盘子都是拿最上面的,放也放在最上面。再对于数组来说,就是每次只能把数据放到最后,取出数据也只能取出最后的。先入后出,后入先出这里直接写代码吧,下面的写法适用于程序设计竞赛const int N = 1e5 + 5;int a[N],m;void push(int num){ // 入栈 ...原创 2020-04-17 10:55:39 · 132 阅读 · 0 评论