PAT 1112~1151

1112

字符串处理,求连续相同的字母,用a[i]和a[i-1]判断和计数,注意当cnt==k时要多往前跳一格。标记好的键。输出的时候遍历整个串,坏的键就往前跳k格。

1113

分割集合,使元素个数之差最小,元素之和之差最大,排序前n/2个一堆,剩下的一堆就行了,要用vector存。

1114

并查集,不用考虑任何辈分关系!!!把同一个家族的关联起来就可以了,在join的时候把id小的定位父节点就可以了,然后每次输入人都join起来,先把房子个数和面积存到相应的id里面。遍历每一个人(这个也要存一下),找到每个人的祖先节点,把房产个数和面积统计到祖先节点里,祖先节点自己的不用统计,然后家族人数+1,并且把每个家族的祖先节点存一下。建一个结构体,存每个家族祖先节点,算出要求的属性,排序。

1115

求二叉搜索树最后两层的节点数。思路大概是建一颗树。。。最开始输入的是根节点,然后后面输入的节点插入到树里去就行了。小的往左,大的往右。到了空节点就赋值,cnt++。节点用结构体。Dfs的话就是每层高度+1。统计每层节点个数。

1116

Map水过,判定素数是从2到<=sqrt(n)

1117

理解题意,有E天每天骑行大于E公里。排序遍历一遍就可以了。

1118

并查集,把输入的第一个元素当作父节点后面的都和他join起来,用set存bird,tree。

for(auto i=bir.begin(); i!=bir.end(); i++) {

tre.insert(find(*i));

}

1119

给出前序遍历和后序遍历求一个中序遍历并判断是否唯一,如果孩子全在左/右子树上并且没有兄弟节点就会出现不唯一的情况。

还是一样按下标遍历,遍历要记录先序和后序的左右范围,如果两个的左边界相差<=1,就不唯一,主要是搜先序遍历,先序遍历的左右边界重合就返回。后序遍历用来确定先序遍历的左右子树下标。

1120

Set水过

auto it 和  set<int>::iterator it 都可以。

1121

Map水过。

1122

判断哈密顿回路,每个节点经过一次,并回到原点,所以首尾节点相同。

用find查联通块,如果是不连通图直接判断不是。

Block=n-1,   

每输入一条边

int A=find(a);

       int B=find(b);

       if(A==B)continue;

       par[A]=B;

       block--;

一开始每个点都是一个块所有都联通了就刚好减到0 了嘛。

1123

模拟AVLtree的插入过程。。。。

1124

Mapmapmap

1125

贪心,从小的往大的合并。

1126

欧拉回路,同样要判断是否是联通图。这里可以直接判断点的度数,奇数点

是0个就是欧拉回路,是2个就是欧拉通路。

1127

给出中序遍历和后序遍历求Z字形遍历。按下标捣鼓,主要搜后序遍历,中序遍历用来确定左右边界和当前节点,然后按层push每层的节点。

1128

伪8皇后问题,直接判断是否成立。

1129

前i位出现频率最高的k个数字。使用set,建立次数和值的结构体。每次更新出现次数,找出之前的次数erase掉再insert新的次数。重载运算符set会自动排序。用it->的方式访问。

1130

不用管他的输入顺序是什么。。。他的下标也是没什么规律。。。但是根节点下标一定在1~n范围内,所以标记一下孩子节点,遍历一遍找出根节点,用结构体保存左孩子,右孩子,值。然后dfs。递归左子树前输出(,递归右子树后输出)。中间是输出值。

1131

用 vector 类型的line[a[i-1]*10000+a[i]] 像这样子存 是否换乘                

a*10000+b来保存一种状态,这两个站在哪条线上

开vector的点来存一个点与他相邻的点,然后dfs起点                   

1132

to_strng(a)将数字a转为string

stoi()将string转为int             

substr(3,4)从3位置截取长度为4的字符串。

1133

链表,用结构体存,分三种来存就可以了。

1134

最小覆盖问题,给边编号,存边,存每个点连的边。然后扫一遍标记就可以了。

1135

判断红黑树。。。先用下标建树(标号),小于往左,大于往右这样子。

用绝对值判断往左还是往右,用正负判断红黑节点,建完树后遍历一遍每个节点的左右子树看看有没有违反红黑树定义。

1136

一串数字加它的逆序在10步以内能不能产生一个回文数字。

模拟大数加法。判断是不是回文reverse一下看看相不相等。

大数加法就是,每一位相加,看看是否进位,要进位就先标记一下,下一位相加的时候+1就可以了。

1137

结构体排序

1138

给出先序遍历和中序遍历求后序遍历

1139

读题,结构体排序。

1140

读懂题目就好了。。。[字符][这个字符出现的次数]不断重复这个过程累加字符串

1141

结构体排序。。。

1142

最大团:团内的点是相互连通的,并且无法找出另一个节点和团内节点都是联通的。

1143

LCA,因为是二叉搜索树,直接从左往右扫前序遍历,在两个节点大小范围内的就是LCA。

1144

水题

1145

哈希二次探测再散列,哈希表的size一定是素数,不是就加到是素数。主要是理解概念。

1146

判断拓扑排序,即删除入度为0的点的顺序。

1147

判断最大堆最小堆。

有多种判断的最好写一个judge函数然后看返回值。

1148

要找出两只狼,直接枚举。。。n^3复杂度也没有关系。。。

1149

Map

1150

判断各种环,常规做法就可以了。。。

1151

LCA,但这次是给出前序遍历和中序遍历。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值