摘要:
每日一题 no.914卡牌分组 把一堆卡牌分组,每组n张,要求n不少于2,组内数字相同。 注意相同的可能被分成多个组。 因此是选最大公约数,求出以后进行计算。(理由:比如六个1,四个2,这时候为了保证每个组的数量是一样的,就拆分,公约数就是新的拆分组内成员数) 使用map来完成,注意map下标是de 阅读全文
摘要:
每日一题 no.914卡牌分组 把一堆卡牌分组,每组n张,要求n不少于2,组内数字相同。 注意相同的可能被分成多个组。 因此是选最大公约数,求出以后进行计算。(理由:比如六个1,四个2,这时候为了保证每个组的数量是一样的,就拆分,公约数就是新的拆分组内成员数) 使用map来完成,注意map下标是de 阅读全文
摘要:
leetcode no.32 最长有效括号 dp[n]代表以s[n]为最后一个点的最长合法子串长度 如果s[n]=='(',那一定是0 如果s[n]==')',分两种合法情况。 1、((()))多重包着,那么dp[n-1]代表里面的层,和s[n]配套的应该是s[i-dp[n-1]-1],如果配套,那 阅读全文
摘要:
leetcode no.2 两数相加 题目内容为求两个逆序链表的和(首位是个位数,越大越往后) 直接加就可以,留一个存进位的 只要l1,l2,tempnum里面有一个不是空,就要再存进去一个数字 记得执行完以后->next 有可能存在0,所以 每轮的tempnum%10即使是0也要存的 如果已在st 阅读全文
摘要:
最小生成树 prim和kruskal 都是贪心 prim类似dijkstra,每次选中不在已访问集合中的d最小的点u加入集合,这里面的d是与已访问集合的距离,dijkstra是与起点的距离 只通过u调整未访问点 注意因为写代码的时候初始化G为0,所以这里面要加上判断g不为0才能用于修改未访问的d 走 阅读全文
摘要:
Bellman Ford 进行n-1轮(最多n-1层,就是[0,n-2]),每次将所有的边松弛,如果进行之后还能松弛,说明是负环 这个复杂度是O(VE),dijkstra是O(V^2+E) 使用邻接表而不是邻接矩阵,邻接矩阵复杂度会上升 邻接表在使用边的时候,判断好Adj[u][j]是对应的边,d[ 阅读全文
摘要:
几个要点 初始化d[s]=0,c[s]=0 每次找到u以后vis[u]=true 使用g[x][y]>0判断有没有边,那么就需要初始化为0,不然有的评测默认不是0. #include<stdio.h> #include<iostream> #include<vector> #include<stri 阅读全文
摘要:
PAT A1076 BFS的题,题不难,有几个注意点 首先,读懂题意,下面每行的是被转发的,比如在数据1的行里面出现了4,是4发布的内容被1转发了 ans里面不包括源头,但是while里面带循环第一次出队列有,所以要从ans=-1开始,另外是出栈的时候计数 第一个点的ceng是0 在判断的时候,只能 阅读全文
摘要:
PAT A1034 并查集或者使用DFS图都可以 题目给定一群人沟通时长,有沟通过的全部算成一组(a和b打,b和c打,a和c一族的),看有几个组大于俩人且权值大于k 首先:并查集 几个需要注意的点 1、输出结果需要是按照字母顺序排序的 2、这个来回都是1000,那么开数组要开到两千,包括father 阅读全文
摘要:
哈夫曼树和哈夫曼编码相关。 哈夫曼树主要解决的问题:有n个堆,将他们合成成一个堆的过程中怎么能消耗最少。(每次选中两个合并,当次消耗为两个的体力之和) 每次选中两个最小的堆就行,合并完以后用和作为新的节点加入。 可以使用优先队列实现。(优先队列默认是降序的,用greater改成升序) #includ 阅读全文
摘要:
堆相关点,堆排序已测试通过代码 #include<stdio.h> const int maxn=1e5+5; int heap[maxn],n=10;//n是元素个数 void downAdjust(int low,int high)//向下调整,是要调整父亲,父亲的下标较小 { int i=lo 阅读全文
|