文章分类 - 算法
摘要:描述 思路 这里首先要明确二分图是一种什么类型的图,二分图的定义是图中所有的节点被分为两个部分,两部分之间的节点可以存在边,但是两个部分的内部不能存在连边。 这里可以看成是一个染色的问题,把图中所有的节点进行广度优先遍历,每一层的节点染成不同的颜色,然后统计两种颜色的节点的个数,最后两者相乘,减去现
阅读全文
摘要:描述 思路: 这里首先可以使用一个二维数组来记录二叉树的结构,使用广度优先遍历的思路来找到全部的快乐节点,为了避免重复遍历,这里使用一个vector容器来记录已经遍历的节点,为了避免遍历的过多,使用一个变量来记录遍历的次数,当广度遍历的次数已经到达距离m的时候,就停止遍历,输出遍历到的数据节点。 代
阅读全文
摘要:描述: 思路: 根据题意,每一次卖出的商品应该是滞留队列中价值价值最大的物品,这里的滞留队列应该就是m的大小,因此可以用一个优先级队列来保存每天滞留的物品。 这里可以定义一个结构体包保存当前的天数以及天数对应的滞留价值。每次取出天数最小且滞留价值最大的物品。 代码: #include <bits/s
阅读全文
摘要:描述: 思想:这里可以使用vector来保存队列中的元素,对于异或和,可以每一次push元素都和当前的和异或以下,然后pop的时候,再用出队列的这个元素和当前的和异或以下,两次相同元素的异或和为0,这样就可以正确记录当前存在与队列中的全部元素的异或和了。注意输入的数据在1~10^9,因此数据类型用l
阅读全文
摘要:描述: 思想: 使用vector容器来模拟栈保证其进行动态的扩容,同时再使用一个vector容器来记录当前栈中的最大值,保证随着元素的进栈和出栈,栈中的最大值都能够正确的记录下来。这里的元素删除操作并不是真正的删除,而是通过对应的下标做调整,元素的清空操作也只是把元素的下标值变为0,其实里面的元素并
阅读全文
摘要:描述: 思想: 采用并查集的思想,使用vector容器保存最初始的对应关系,使用一个无序map表来进行合并操作。unordered_map<int, list>,其中key表示的是对应的元素值,value用一个list链表来保存对应的数组下标。 代码: #include <bits/stdc++.h
阅读全文
摘要:描述: 思想: 分别计算出中位数和平均数的大小,然后进行比较,这里为了避免小数带来的影响,统一对数据进行乘以n的操作。 代码: #include <any> #include <bits/stdc++.h> using namespace std; int main() { // 中位数:排序后位于
阅读全文
摘要:描述: 思想: 这里可以把该方程理解为,与a做或运算可以表示为将a中的某一位变为0或者不变,为了保持等式两边平衡,只能在a在二进制下为0的进制位进行操作,于此同时加上的也是对应的一个数。即统计a中为0的个数,然后做排列组合。 代码: #include <bits/stdc++.h> using na
阅读全文
摘要:描述: 思想: 这里就是一个递归的思想,不断的将x的值进行减少,直到满足条件,然后将对应下标的数组进行自增计算即可。 代码: #include <bits/stdc++.h> using namespace std; void getres(vector<int>& res,int x){ if(x
阅读全文
摘要:描述: 思路: 这里采用位运算的方式,让初始值为L,然后逐步来将这个初始值的每一位改为1,同时满足改为1后的值要小于等于R。 代码: #include <bits/stdc++.h> using namespace std; int main(){ long long q,l,r; cin >> q
阅读全文
摘要:描述: 思路: 采用滑动窗口的方式,先对数组进行排序,然后维持k范围的一个滑动窗口,如果条件满足,就返回当前窗口的最大值,如果条件不满足那就将当前的窗口向前移动一格,以此反复。 代码: #include <bits/stdc++.h> using namespace std; int main()
阅读全文
摘要:这是基于博弈论中的Nim游戏原理。 在经典的Nim游戏中,两个玩家轮流从一堆石子中取石子,取走的数量可以自由选择,但每次 至少取走一个,最后一个取走石子的人获胜。 Nim游戏的一个重要概念是Grundy数(又称Nimber),它是判断一个状态是必胜态还是必败态的关键。对于任意两个Nim游戏堆,可以通
阅读全文
摘要:这里的难点是每个节点有权值,同时节点之间的路径上也存在权值。 虚拟出一个0号节点,它与其他节点之间的路径权值就是演唱会的票价,这样题目就转化为求从0号节点到剩下的节点之间的最短的距离。 #include <climits> #include <functional> #include <iostre
阅读全文
摘要:这里可以考虑已知目标值为n,反向操作,怎么以最快的步骤把他减到0。 首先考虑能否被3整除,如果能够那就直接除3; 如果有余数,减完余数后继续去除3,这样的步骤将是最快的。 code: #include <iostream> using namespace std; int main() { int
阅读全文
摘要:问题描述: 输入输出示例: 思想:采用递归的思想,从根节点出发,递归遍历子节点,然后用两个变量记录当前子树下的最大值和最下值。特别注意以引用的形式记录最大值和最小值,这样能保证把子树的值都传递上来。 代码实现: #include <iostream> #include <vector> using
阅读全文
摘要:问题描述: 算法思想:使用递归方法来解决,每次计算出区间内的最小值,然后区间的所有元素都减去这个最小值,然后统计数值为零的数据对应的下标,然后再分别处理零之间的元素。 代码实现: #include <cstdint> #include <iostream> #include <vector> #in
阅读全文
摘要:描述:给一个数组长度为n的数组ai,求有多少对(i,j)(1<=i<j<=j),使得ai+aj = i+j 题解:这里可以考虑使用unorder_map容器,也就是hash的思想来解决,将上述公式转换为ai-i = -(aj-j),在hash表中保存每一次输入的差值,可以每次保存ai-i的值在has
阅读全文

浙公网安备 33010602011771号