随笔分类 - 数据结构与算法
摘要:S 城现有两座监狱,一共关押着N 名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨气值为c 的罪犯被关押在同一监狱,
阅读全文
摘要:认识哈希函数和哈希表的实现 MD5 表达16^16范围的值 SHal 表达16^32范围的值 输入相同,即输出相同,不随机 不同的输出,输出相同 均匀性,离散性 设计RandomPool结构 设计一种结构,在该结构中有如下三个功能: insert (key):将某个key加入到该结构,做到不重复加入
阅读全文
摘要:暴力递归就是尝试 1, 把问题转化为规模缩小了的同类问题的子问题 2, 有明确的不需要继续进行递归的条件(base case) 3, 有当得到了子问题的结果之后的决策过程 4, 不记录每一个子问题的解 一定要学会怎么去尝试,因为这是动态规划的基础,这一内容我们将在提升班讲述 汉诺塔问题 打印n层汉诺
阅读全文
摘要:数的划分 将整数n分成k份,且每份不能为空,任意两份不能相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的。1,1,5; 1,5,1; 5,1,1; 问有多少种不同的分法。 输入:n,k ( 6 using namespace std; define rep(i,n) for (
阅读全文
摘要:介绍前缀树 何为前缀树?如何生成前缀树? 例子:一个字符串类型的数组arrl,另一个字符串类型的数组arr2。arr2中有哪些字符,是arr 1中 出现的?请打印。arr2中有哪些字符,是作为arr 1中某个字符串前缀出现的?请打印。arr2 中有哪些字符,是作为arr1中某个字符串前缀出现的?请打
阅读全文
摘要:New Year Transportation 新年就要来了!在这个世界中,有 n 个单元格,它们的编号是从1到 n ,就像一个1× n 板。人住在细胞里。然而,它很难在不同的细胞之间移动,因为很难逃离细胞。 人们想要认识住在其他牢房的人。因此,tncks0121用户制作了一个运输系统,在这些细胞之
阅读全文
摘要:图的存储方式 1) 邻接表 2) 邻接矩阵 如何表达图?生成图? 广度优先遍历 1, 利用栈实现 2, 从源节点开始把节点按照深度放入栈,然后弹出 3, 每弹出一个点,把该节点下一个没有进过栈的邻接点放入栈 4, 直到栈变空 拓扑排序算法 适用范围:要求有向图,且有入度为。的节点,且没有环 题目四
阅读全文
摘要:求二叉树中两个结点的最大公共父节点 1 / \ 2 3 / \ / \ 4 5 6 7 /\ /\ /\ /\ 如上图所示,由正整数 1, 2, 3, ...组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从5到根结点的路径是(5, 2, 1)
阅读全文
摘要:二叉树节点结构 用递归和非递归两种方式实现二叉树的先序、中序、后序遍历 如何直观的打印一颗二叉树 C++二叉树的实现 二叉树节点 BinNode模板类 二叉树节点操作接口 插入孩子节点 遍历 二叉树 BinTree模板类 高度更新 节点插入 子树接入 子树删除 遍历 先序遍历 后序遍历 中序遍历 如
阅读全文
摘要:链表的回文结构 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 给定一个链表的头指针 A ,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。 测试样例: Java C++ two sum https://www.nowco
阅读全文
摘要:哈希表的简单介绍 1) 哈希表在使用层面上可以理解为一种集合结构 2) 如果只有key,没有伴随数据value,可以使用HashSet结构(C++中叫UnOrderedSet) 3) 如果既有key,又有伴随数据value,可以使用HashMap结构(C++中叫UnOrderedMap) 4) 有无
阅读全文
摘要:insert interval 给定一组不重叠的时间区间,在时间区间中插入一个新的时间区间(如果有重叠的话就合并区间)。 这些时间区间初始是根据它们的开始时间排序的。 示例1: 给定时间区间[1,3],[6,9],在这两个时间区间中插入时间区间[2,5],并将它与原有的时间区间合并,变成[1,5],
阅读全文
摘要:比较器的使用 1) 比较器的实质就是重载比较运算符 2) 比较器可以很好的应用在特殊标准的排序上 3) 比较器可以很好的应用在根据特殊标准排序的结构上 桶排序思想下的排序 1) 计数排序 2) 基数排序 分析: 1) 桶排序思想下的排序都是不基于比较的排序 2) 时间复杂度为O(N),额外空间负载度
阅读全文
摘要:认识时间复杂度 常数时间的操作 一个操作如果和样本的数据量没有关系,每次都是固定时间内完成的操作,叫做常数操作。 时间复杂度为一个算法流程中,常数操作数量的一个指标。常用0(读作big 0)来表示。具体 来说,先要对一个算法流程非常熟悉,然后去写出这个算法流程中,发生了多少常数操作, 进而总结出常数
阅读全文
摘要:输入整型数组和排序标识,对其元素按照升序或降序进行排序 (一组测试用例可能会有多组数据) 接口说明 原型: void sortIntegerArray(Integer[] pIntegerArray, int iSortFlag); 输入参数: Integer[] pIntegerArray:整型数
阅读全文
摘要:成绩排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理。 示例: jack 70 peter 96 Tom 70 smith 67 从高到低 peter 96 jack 70 Tom 70 smith 67 从低到高 smith 67
阅读全文
摘要:归并排序 1) 整体就是一个简单递归,左边排好序、右边排好序、让其整体有序 2) 让其整体有序的过程里用了外排序方法 3) 利用master公式来求解时间复杂度 4) 归并排序的实质 时间复杂度0(N logN),额外空间复杂度0(N) JAVA 堆排序 1. 先让整个数组都变成大根堆结构,建立堆的
阅读全文

浙公网安备 33010602011771号