- 博客(41)
- 收藏
- 关注
原创 81. 搜索旋转排序数组 II
请你编写一个函数来判断给定的目标值是否存在于数组中。解题思路: 将nums数组变成有序。首先是找到旋转的下标k。已知存在一个按非降序排列的整数数组。然后尝试将数组变成有序,我们假设。你必须尽可能减少整个操作步骤。,数组中的值不必互不相同。在预先未知的某个下标。
2025-02-01 11:05:09
149
原创 2270. 分割数组的方案数
个元素(right)的和。即left >= right 则 2 *left >= left + right。分割位置只需要当前位置的前缀和的2倍大于整个数组的前缀和即可。前缀和用long long 防止溢出。个元素(left)的和。如果以下描述为真,那么。
2025-01-13 20:27:18
120
原创 27. 移除元素
如果左指针 left 指向的元素等于 val,那么将left的元素赋值为right的元素,因为题目不关心后面的数组,故right的元素不用处理。然后右指针 right 左移一位。如果赋值过来的元素恰好也等于 val,可以继续赋值(左指针 left 指向的等于 val 的元素的位置继续被覆盖),直到左指针指向的元素的值不等于 val 为止。当左指针 left 和右指针 right 重合的时候,左右指针遍历完数组中所有的元素。
2025-01-11 19:57:52
224
原创 pat 甲级 1057 Stack
push,pop通过正常的栈来实现。peekmedian则通过两个multiset来维护,从小到大的序列。up存储后半段的值,down存储前半段的值,且保证down.size()==up.size()+1。则down中的最大值就是中值。
2024-03-04 17:13:21
440
原创 pat 甲级 1054 The Dominant Color
思路:主导颜色,超过一半的像素。且题目保证存在主导颜色。则将所有像素的颜色放入数组,其中间的数一定就是主导颜色。
2024-02-28 10:43:40
432
原创 pat 甲级 1053 Path of Equal Weight
中文题面:给定一个非空的树,树根为 R。树中每个节点 Ti 的权重为 Wi。从 R到 L 的路径权重定义为从R 到任何L 的路径中包含的所有节点的权重之和。现在给定一个加权树以及一个给定权重数字,请你找出树中所有的权重等于该数字的路径(必须从根节点到叶节点)。例如,我们考虑下图的树,对于每个节点,上方的数字是节点ID,它是两位数字,而下方的数字是该节点的权重。, 已经在图中用红色标出。
2024-02-28 10:31:26
423
原创 pat 甲级 1051 Pop Sequence
思想:如果要弹出一个数,那么说明比它小的数字已经进栈了,所以要在一个数num输入之后把比它小的数都输入到栈中,直到栈满或者val==num时结束入栈操作。如果val==num,将这个值弹出,否则说明整个序列存在问题,把flag变为false,输出结果。
2024-02-23 20:59:08
405
原创 pat 甲级 1049 Counting Ones
*如果百位上的数字为0,则可以知道,百位上可能出现1的次数由更高位决定,比如12013,则可以知道百位出现1的情况可能是11113等情况。即该位等于0,第一种情况。前3位可以选择0 ~ abc - 1 后3位可以选择0~999。则前3位可以选择0 ~ abc - 1 后3位可以选择 0 ~ 999。1.d =0,即该位等于0,那若想要d位出现1,则受更高位影响。该位等于1,前3位可以选择abc 后3位可以选择0 ~ efg。前3位可以选择0 ~ abc 后3位可以选择0-999。
2024-02-22 20:34:41
446
原创 pat 甲级 1048 Find Coins
这道题的思路就是用一个哈希表存储硬币。我们使用set,会去重,但是题目存在v1==v2的情况,直接使用哈希表无法判断是否有两个相同的硬币。所以我们需要在存入硬币前进行判断。如果存在,则是一组解,先插入集合,然后判断该解的小面值硬币是否小于 v1, 如果是,则存入 v1, v2。对于每一枚硬币 x,先判断在集合中是否存在 y,使得 x + y = m。如果不存在,则将x插入集合后跳过。如果存在解,则输出。
2024-02-22 19:22:20
335
原创 pat 甲级 1047 Student List for Course
这道题思路较为简单,但是使用cin与cout会超时。需要使用scanf,printf和(string).c_str()的输出方法,减少运算时间,就可以通过了。
2024-02-22 18:27:18
399
1
原创 pat 甲级 1045 Favorite Color Stripe
则p[i]与s[j]都不选或任选其一,分别为f[i-1][j-1],f[i][j-1],f[i-1][j]。又因为f[i-1][j-1]包含在f[i][j-1],f[i-1][j]中。所以f[i][j]=max(f[i−1][j],f[i][j−1])2. p[i] == s[j],则包含p[i]与s[j]。由于p[i]可以重复,f[i][j]=max(f[i][j−1],f[i−1][j−1])+1。f[i-1][j-1]+1表示p[i]之前未在。f[i][j-1]+1则是p[i]已经在。
2024-02-20 19:49:20
447
原创 pat 甲级 1043 Is It a Binary Search Tree
题目给出了二叉搜索树的前序遍历序列,然后根据而二叉搜索树的性质:二叉搜索树的中序遍历是有序序列,我们将前序遍历序列进行排序即可得到中序遍历序列,根据前中遍历序列可以构造唯一二叉树。构建二叉搜索树可参考。
2024-02-18 15:29:18
418
原创 pat 甲级 1040 Longest Symmetric String
【代码】pat 甲级 1040 Longest Symmetric String。
2024-02-17 11:18:16
420
1
原创 pat 甲级 Head of a Gang
这道题思路,首先将所有的联系看作无向图。答案就是要找出符合条件(点的数量大于2,且总的时间大于阈值k)的连通图。
2024-02-15 13:55:10
380
1
原创 pat 甲级 1033 To Fill or Not to Fill
2.在未来可到达的加油站中,没有比当前便宜的价格,则在当前站将油加满,行驶到最便宜的加油站去考虑下一步怎么做。1.在未来可到达的加油站中,有更便宜的价格。则只需要加到能行驶到最便宜的加油站的油后在加油。这道题用贪心的思想。到一个加油站时需要考虑以下情况。
2024-02-15 11:06:14
368
1
原创 pat 甲级 1032 Sharing
题目给出的是数组构成的链表。可以先用数组存储链表,然后访问第一个链表,利用st[]数组记录访问过,当第二个链表遍历时,若遇见已经遍历过的,就是两个链表的第一个公共节点。同时如果用int数组存储的要注意输出五位数,不然会error。
2024-02-11 15:09:16
403
1
原创 pat 甲级 1030 Travel Plan
由于题目可能存在不同的最短路径,需要选择开销最小的路径,同时要存储路径。存储路径可以考虑用path[j]存储 j 前一个的节点,不停的递归即可获取完整的路径。这道题的本质就是单源最短路径问题。我们考虑使用dijkstra算法。dijkstra算法模板。
2024-02-11 13:19:40
756
1
原创 pat 甲级 1025 PAT Ranking
模拟题,由于一个人的存储的信息很多,则考虑用结构体存储数据。而由于每组有不定的人数。故考虑用vector存储每组的数据。然后就是数据的处理,有local_rank和final_rank,则先处理local_rank再处理final_rank,处理方法一致。
2024-01-26 14:24:57
472
1
原创 pat 甲级 1022 Digital Library
注意如果前面的cin>>n,需要用getchar()读取后面的换行符然后在使用getline();,常用于数据类型的转换(字符串转为数值型),除此之外还能用来对字符串进行分割操作。将字符串"Hello World!My name is C++"按空格分割。由于中间是由空白符做分割,而c++输入流是默认跳过空白符的所以可以直接只用。这道题为模拟题,相对简单,只是处理起来较为麻烦。头文件中定义的流之一, 它的操作类似于。2.读取整行的字符串(含有空格)
2024-01-24 14:54:51
328
1
原创 pat 甲级 1021 Deepest Root
中文意思:一个无环连通图可以被视作一个树。树的高度取决于所选取的根节点。现在,你要找到可以使得树的高度最大的根节点。它被称为最深的根。
2024-01-23 12:15:34
889
1
原创 pat 甲级 1020 Tree Traversals
通过后序遍历找到根的值,然后再到中序序列里找到根的位置再将该树分为左子树与右子树。不断递归即可通过中序和后序重塑一棵树。这道题的思路是先构建二叉树,然后层序遍历二叉树。将问题拆解:1.如何构建二叉树。2.如何测层序遍历二叉树。(2)中序遍历根的左右分左子树和右子树。(1)后序遍历的最后是该树或子树的根。2.bfs层序遍历树。
2024-01-22 13:35:06
599
1
原创 pat 甲级 1018 Public Bike Management
2.send(PBMC需要发出的自行车数量)如何在满足要求下保证最小,可以send初始为0,DFS遍历所有最短路径,当节点不完美时,send-(最大数量/2-节点bike的数量)即需要满足perfect所需的bike数目的负值。而带回来的bike数量则是发出的自行车数量-路径满足perfect所需的bike数量。(3)在(1)(2)都满足的条件下,带回来的bike需要最小;(2)在(1)都满足的条件下,PBMC发出的bike需要最小。(1)路径取得最小值 (Dijkstra()已经实现)
2024-01-20 16:59:03
500
原创 pat 甲级 1017 Queueing at Bank
注意因为每个人的到达时间转换成距离00:00:00的秒数,窗口的开放时间为08:00:00,故小根堆需要初始化为8*60*60;选择时间最小的窗口进行服务后,要对窗口的值进行更新,开始服务时间+min(服务时间,60*60)。同时若到达时间小于窗口的最小值,说明需要等待,要记录等待时间(开始服务时间-到达时间);可以将每个人的到达时间转换成距离00:00:00的秒数。存储服务时间的时候,若大于一小时,则终止服务(题目要求),故存储的服务时间为min(服务时间,60*60);
2024-01-19 17:00:44
578
1
原创 pat 甲级 1016 Phone Bills
需要处理的就是花费的话费,我们假设一个月有31天,那N<1000,每人最少两条数据,最多500个人,则复杂度为500*31*1440(每天的分钟)*24(24种话费情况),而时间限制是200ms,会超时。所以我们考虑用前缀和的思想,sum[]表示即当前的时间距离每月的0点0分所花费的话费,则电话的结束时间所花费的sum[]-电话的开始时间所花费的sum[],即为该时间段的话费。
2024-01-18 13:54:57
376
1
原创 pat 甲级 1013 Battle Over Cities
并查集的路径压缩:路径为压缩之前如图1,我们调用find(4),因为(4!=p[4]) 执行p[4]=find(p[4]);递归调用直到p[x]==x,由于p[1]=1,故返回1。此时变成图2,最终会变成图3。则下次查询祖宗时,效率会大大提升。这道题的输出结果是如果那座城市失守,那么需要修复的公路数量。我们将连通的城市看出一个集合。那么需要修复的公路数量就是集合的数量-1(连通 n个点最少需要n-1)。而集合的合并以及确定集合的数量,可以使用并查集。
2024-01-15 14:10:15
555
1
原创 pat 甲级 1012 The Best Rank
根据student ID从map中得到对应的四个分数,依次查询该分数在vector<int>中的位置(即排名),得到最优的名次。(2)因为要根据student ID 查询最优的名次。这道题的思路是算出平均分,然后分别对平均分、c语言、数学、英语进行排序。当用student ID查询时,根据对应分数查询四个分数的名次,输出最优的名次。1.首先是求出平均分,t[1~3]分别对应c语言、数学、英语的分数。2.(1)因为总共4个分数,但是人数不确定,考虑使用可变长数组vector<int> g[4]存储分数。
2024-01-12 23:06:21
464
原创 pat 甲级 1010 Radix
先说一下整体思路,题目给出四个数据,分别是N1 N2 tag radix,当tag==1时,我们将radix进制下的N1转换成10进制,然后枚举各进制下的N2,再转换成10进制,判断是否与N1相等即可。,其值相当于10机制的x(此时进制数==他的值)。故进制的最大值应该是N1所能表示的最大值;因为N2里面的数字是永远小于他的进制的。故进制的下界就是N2里面的数字的最大值+1。其次就是进制暴力枚举的复杂度是o(n)的,会超时;而考虑到随着进制的增大,N2的数值也是增大的,是单调的,所以可以使用二分。
2024-01-11 10:14:25
477
1
原创 pat 甲级 1007 Maximum Subsequence Sum
(2) 当区间长度大于1时,i必取,则f[i]=f[i-1]+w[i];2.如何求得最大子序列的第一个和最后一个数字,并保证如果最大子序列不是唯一的,则输出索引i和j最小的子系列。首先定义一个集合f[i],表示以i为右端点的区间和的最大值(即i之前并包含i的最大子序列和)。2.如何求得最大子序列的第一个和最后一个数字,并保证如果最大子序列不是唯一的,则输出索引i和j最小的子系列?1.如何求得最大子序列和?
2024-01-06 17:27:35
756
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人