
算法
文章平均质量分 93
Olamyh
Just for fun. (blog.ccyh.xyz)
展开
-
图解红黑树
红黑树红黑树的基本结构2-3 树2-3 树 -> 红黑树红黑树的创建整体代码参考红黑树的基本结构 红黑树(Red-black tree) 是一种自平衡二叉查找树,是在计算机科学中用到的一种数据结构,常用于关联数组、字典等。C++ 中的标准关联容器set、multiset、map、multimap内部采用的数据结构就是红黑树。红黑树的定义:每个节点只能是红色的或黑色的根节点是黑色的每个叶子节点都是黑色的如果一个节点是红色的,那么它的孩子节点必须是黑色的从任意一个节点到叶子节点经过的原创 2021-09-22 18:52:32 · 342 阅读 · 0 评论 -
[图解算法]并查集
一文读懂并查集 假设你现在置身于一个鸡尾酒会中,任何人都不能通过直接搭讪来获得陌生漂亮妹子的微信号。于是你委托你的朋友帮忙,你的朋友委托他的朋友。。。直到找到一位与漂亮妹子认识的人拿到了微信号。因此,你通过这些中间朋友与妹子取得了联系,成功进入了她的社交圈。当然,你可以通过她认识跟多的漂亮妹子,走上人生巅峰。 但是设想一下这样一个悲剧,那位漂亮妹子刚来到地球,她与地球上所有的人类都没有联系...原创 2020-02-04 13:12:06 · 707 阅读 · 2 评论 -
【图解算法】线段树 (SegmentTree)
线段树 线段树是算法竞赛中常用的用来维护 区间信息 的数据结构。线段树可以在 O(log2N)O(\log_{2}{N})O(log2N) 的时间复杂度内实现单点修改、区间修改、区间查询等操作。线段树的基本结构为数组(假设下标从1开始):a[5]=[1,2,3,4,5]a[5] = [{1,2,3,4,5}]a[5]=[1,2,3,4,5]构造线段树如下图(采用堆式存储):上...原创 2020-02-04 13:03:42 · 655 阅读 · 0 评论 -
[图解算法]Tarjan算法求图的强连通分量
强连通分量简介 有向图强连通分量:在有向图G中,如果两个顶点Vi,VjV_i, V_jVi,Vj 间有一条从ViV_iVi到VjV_jVj的有向路径,同时还有一条从VjV_jVj到ViV_iVi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量(strongly con...原创 2019-11-23 08:20:55 · 793 阅读 · 2 评论 -
[图解算法]LeetCode23 合并 K 个排序链表
题目描述: 合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6题解: 因为所给链表均有序且头节点指针均在一个数组中,可以将当前数组中的头节点指针所指向的链表节点的...原创 2019-09-10 15:35:21 · 171 阅读 · 0 评论 -
[图解算法]LeetCode1178 猜字谜
题目描述:外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底:单词 word 中包含谜面 puzzle 的第一个字母。单词 word 中的每一个字母都可以在谜面 puzzle 中找到。例如,如果字谜的谜面是 “abcdefg”,那么可以作为谜底的单词有 “face...原创 2019-09-06 16:49:05 · 721 阅读 · 0 评论 -
[图解算法] [LeetCode 295] 数据流中的中位数
[LC295] 数据流中的中位数(类设计)题目描述:中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。例如:[2,3,4] 的中位数是 3[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。double findMedian() - ...原创 2019-08-29 15:40:39 · 462 阅读 · 0 评论 -
全排列C++
算法思想:设定一个数组p用来存放当前排列,并用一个数组Hash用来标记已填入p中的数字。按顺序将数字填入数组p中的第0位置第Max-1位,现在假设已经填好了p[0]p[index-1],正准备将数字填入index位置,若index位置未及Max(数组边界),则枚举0Max-1;判断是否有数字未填入,若有则将其填入p中,同时在Hash中将该数字置为已填入。其后继续填入下一个位置index+1...原创 2019-05-04 19:56:10 · 885 阅读 · 0 评论 -
背包问题的DFS解法
Knapsack Problem问题描述:有n件物品,每件物品重w[i],价值为c[i]。现在需要选出若干件物品放入一个容量为V的背包中,使得在选入背包的物品总重量不超过背包限重的情况下,让背包内的物品总价值达到最大。DFS解法:算法思想:对于每件物品,有两种情况(选,或不选)。若选择该物品,则将更新背包内的总重与总价值量,若不选择该物品,则跳过它去判断下一件物品,当处理完n件...原创 2019-05-04 19:54:46 · 1318 阅读 · 0 评论 -
素数筛法
Eratosthenes筛法算法思想:从小到大枚举所有数,对每一个素数,筛去其所有的倍数,剩下的就都是素数了。比如:已知2为素数,筛去2的倍数4,6,8,10…继续枚举到3,筛去3的倍数6,9,12,15…由于4已被筛去,故其不是素数,来到5,筛去5的倍数10,15…如此下去,即可得到一个素数表代码实现:#include <iostream>#include...原创 2019-05-04 19:52:01 · 200 阅读 · 0 评论 -
PAT B1019数字黑洞
【PAT】B1019#include <iostream>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>using namespace std;struct digs{ int dig[10]; int len; dig...原创 2019-05-04 19:50:20 · 272 阅读 · 0 评论 -
DP不相邻元素最大和问题
动态规划问题描述:给定一个整数数字序列(用数组表示),在这个数列中选择若干个互不相邻的数,使得这些数的和达到最大值。分析:属于01背包问题同类问题,对于每一个数,都有两种选择(选或不选)。假设给定数组set[]的长度为n,最终要求OPT(n-1)的结果,也就是从下标0到下标n-1这些数中能组成的最大和,而要求OPT(n-1)就分为两种情况:1.选择set[n-1],因为不能出现...原创 2019-05-04 19:45:30 · 1002 阅读 · 0 评论