算法与数据结构
MaloFleur
这个作者很懒,什么都没留下…
展开
-
少玩游戏多种树——红黑树
写在前面:1. 关于红黑树,其实工作中并不会让你去构造以及实现如何增删节点,因为无论是C++还是Java,都封装了相应的数据结构(如map、set等),内部用的就是红黑树,但我们需要知道这有什么优点,解决了什么问题,以及在什么情况下用该数据结构,提高效率2. 红黑树也是平衡二叉树的一种,相比AVL树,红黑树的规则更宽松,AVL树严格要求平衡因子之差小于2,因此在查找频繁时,AVL树更优,而在...原创 2019-01-31 23:47:04 · 312 阅读 · 0 评论 -
0到n之间数字d出现的次数
给定两个数字n和d,d在0~9之间判断在0 ~ n之间的所有数中,数字d出现的次数比如n=32, d=4, 则共出现4, 14, 24三次这道题跟剑指offer中 整数中1出现的次数(从1到n整数中1出现的次数) 有点像,不同点在于数字在0~9之间随机,且范围为[0, n]先将32减到29,保证能覆盖所有个位数,则共包含9、19、29三个数再看十位数,最大值只到十位数为2,因此十位数=...原创 2019-06-03 13:44:40 · 995 阅读 · 0 评论 -
Maximum Sum Rectangular Submatrix in Matrix dynamic programming/2D kadane
本文是对 Maximum Sum Rectangular Submatrix in Matrix dynamic programming/2D kadane 的转述与理解给定一个矩阵,找出某个子矩阵,使该子矩阵中元素之和最大所给矩阵如下图,并初始化maxSum = 0, curaccumulateSum表示当前各行累加的值第一轮,L和R均从第0列开始遍历,当前累加值为[2, 0, 2, -3...原创 2019-06-21 10:28:28 · 414 阅读 · 0 评论 -
KMP算法递归部分解析
关于KMP算法,比较难以理解的一部分应该是构造next数组:void GetNext(char* p,int next[]){ int pLen = strlen(p); next[0] = -1, next[1] = 0; int k = -1; for(int j = 1; j < pLen; ++j) { int k =next[j]; while(k >=...原创 2019-07-03 15:49:10 · 346 阅读 · 0 评论 -
数论分块证明与例题
证明:例题:1257: [CQOI2007]余数之和本质是求∑i=1n(k%i)=∑i=1n(k−i∗⌊ki⌋)=nk−∑i=1n(i∗⌊ki⌋)\sum_{i=1}^n(k \% i)=\sum_{i=1}^n(k-i*\lfloor{\frac{k}{i}}\rfloor)=nk-\sum_{i=1}^n(i*\lfloor{\frac{k}{i}}\rfloor)∑i=1n(k%...原创 2019-07-24 20:56:36 · 583 阅读 · 0 评论 -
堆排序的理解与递归实现(带注释C++)
首先要明确最大堆一定是一棵完全二叉树,即父节点(从1开始)与子节点 (若存在) 的编号关系为left = 2 * parentright = 2 * parent + 1代码实现:#include <iostream>#include <vector>using namespace std;#define fo(i, a, b) for(int i = a...原创 2019-08-05 21:55:11 · 416 阅读 · 0 评论 -
N个节点的二叉树有多少种形态
转载自N个节点的二叉树有多少种形态这是一道阿里的面试题。其实算不上新鲜,但是我之前没关注过,如今碰到了,就顺便探讨下这个问题吧:)拿到这个题,首先想到的是直接写出表达式肯定不行,所以有必要从递推入手。由特殊到一般,归纳法么~而且二叉树离不开递推这个尿性。。。先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1如果有两个节点呢?我们很自然想到,应该在f(1)的基础上考虑...转载 2019-08-05 21:59:07 · 3944 阅读 · 0 评论