递归详解

首先说明一个问题,简单阐述一下递归,分治算法,动态规划,贪心算法这几个东西的区别和联系,心里有个印象就好。递归是一种编程技巧,一种解决问题的思维方式;分治算法和动态规划很大程度上是递归思想基础上的(虽然动态规划的最终版本大都不是递归了,但解…

反直觉概率

今天聊点轻松的内容:几个和概率相关的有趣问题。计算概率有下面两个最简单的原则:原则一、计算概率一定要有一个参照系,称作「样本空间」,即随机事件可能出现的所有结果。事件A发生的概率=A包含的样本点/样本空间的样本总数。原则二、计算概率一定要明…

常见的位操作

本文分两部分,第一部分列举几个有趣的位操作,第二部分讲解算法中常用的n&(n-1)操作,顺便把用到这个技巧的算法题列出来讲解一下。因为位操作很简单,所以假设读者已经了解与、或、异或这三种基本操作。一、几个有趣的位操作利用或操作|和空…

刷题指南

一、数据结构的存储方式数据结构的存储方式只有两种:数组(顺序存储)和链表(链式存储)。这句话怎么理解,不是还有散列表、栈、队列、堆、树、图等等各种数据结构吗?我们分析问题,一定要有递归的思想,自顶向下,从抽象到具体。你上来就列出这么多,那些…

二叉堆&优先级队列

二叉堆(BinaryHeap)没什么神秘,性质比二叉搜索树BST还简单。其主要操作就两个,sink(下沉)和swim(上浮),用以维护二叉堆的性质。其主要应用有两个,首先是一种排序方法「堆排序」,第二是一种很有用的数据结构「优先级队列」。本…

KMP算法

KMP算法(Knuth-Morris-Pratt算法)是一个著名的字符串匹配算法,效率很高,也有点复杂。先在开头约定,本文用pat表示模式串,长度为M,txt表示文本串,长度为N。KMP算法是在txt中查找子串pat,如果存在,返回这个子串…

10.正则表达式匹配

10.正则表达式匹配https://leetcode-cn.com/problems/regular-expression-matching/10.正则表达式匹配给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’…

数据结构_树_1_基本概念

双亲结点孩子结点有相同双亲的结点:兄弟结点一个结点的子结点的个数,称为该结点的度树中结点的最大度数称为树的度 树的高度(深度)是树中结点的最大层数同一双亲结点的两个孩子结点之间不存在路径 树中的结点数等于所有结点的度数+…