KMP算法 1. 算法介绍 KMP是一个解决模式串在文本串是否出现过,若出现过,最早出现的位置的算法 Knuth Morris Pratt 字符串查找算法,简称“KMP算法”,此算法由 Donald Knuth、Vaughan Pratt、James H. Morris 三人于 1977年联合发表, ...
分类:
编程语言 时间:
2020-05-01 01:21:12
阅读次数:
58
在查找数据的时候除了暴力查找外,还可可以使用二分法查找,二分法查找又叫折半查找。二分法在查找的时候效率是比较高的,但是它有 局限性,就是仅适用于顺序表,不管是升序还是降序都适用。原理就是取顺序表的中间那个元素mid,然后用中间的元素mid和待查找元素x进 行比较大小,以此改变下次的查找区间,使得下次 ...
分类:
其他好文 时间:
2020-04-29 21:53:53
阅读次数:
56
一、思维导图: 二、重要概念: 1、二叉树的五种基本形态: 2、前、中、后序遍历: 1.1前序遍历 根节点 左子树 右子树 1.2中序遍历 左子树 根节点 右子树 1.3后序遍历 左子树 右子树 根节点 2、ASL计算: 如图所示的二叉排序树,其成功的平均查找长度是 ; 不成功的平均查找长度是 。 ...
分类:
编程语言 时间:
2020-04-26 21:14:49
阅读次数:
70
一、思维导图 二、重要概念 一、树 1.定义:n(n =0)个结点的有限集合T 对于非空树: ·有且仅有一个特定的称为根的结点; ·当n 1时,其余结点可分为m(m 0)个互不相交的有限集T1.T2...Tm,其中每个集合本身又是一颗树,称为根的子树。 ·树的定义是一个递归定义。 2.基本术语: · ...
分类:
编程语言 时间:
2020-04-26 18:33:34
阅读次数:
58
查找算法 二分查找 非递归版的 递归版的 floor实现 二分查找法, 在有序数组arr中, 查找target,如果找到target, 返回第一个target相应的索引index,如果没有找到target, 返回比target小的最大值相应的索引, 如果这个最大值有多个, 返回最大索引,如果这个ta ...
分类:
编程语言 时间:
2020-04-23 16:19:35
阅读次数:
72
1.双指针 双指针解决数组,字符串,二分搜索,链表翻转、判断是否有环、寻找链表向后数第i个元素、链表中间的元素。 1.1有序数组两数之和 left = 0,right = arr.len 1 若arr[left]+arr[right] sum,right ;否则left++; 1.2最小子串(双指针 ...
分类:
其他好文 时间:
2020-04-22 22:52:53
阅读次数:
81
一:解题思路 这个题目是二分搜索的一个变体。Time:log(n),Space:O(1) 二:完整代码示例 (C++版和Java版) C++: class Solution { public: int findMin(vector<int>& nums) { int low = 0; int hig ...
分类:
编程语言 时间:
2020-04-20 13:47:31
阅读次数:
62
某些教程不区分普通红黑树和左倾红黑树的区别,直接将左倾红黑树拿来教学,并且称其为红黑树,因为左倾红黑树与普通的红黑树相比,实现起来较为简单,容易教学。在这里,我们区分开左倾红黑树和普通红黑树。 红黑树是一种近似平衡的二叉查找树,从 树或 树衍生而来。通过对二叉树节点进行染色,染色为红或黑节点,来模仿 ...
分类:
编程语言 时间:
2020-04-18 13:43:54
阅读次数:
69
思路:折半查找,关键在于停止循环的条件。 1 class Solution(object): 2 def searchInsert(self, nums, target): 3 """ 4 :type nums: List[int] 5 :type target: int 6 :rtype: int ...
分类:
其他好文 时间:
2020-04-17 23:59:52
阅读次数:
406
二分查找的引入 在介绍二分查找之前,对于基于数字索引的数组元素的查找,我们可能第一反应都是遍历这个数组,直到给定数组元素值和待查找的值相等时,返回索引值并退出,否则一直遍历到最后一个元素,如果还是没有找到则返回 1,这样的查找虽然是简单粗暴了点,但是对于规模不大的数据集,也是没什么问题的,不过很明显 ...
分类:
编程语言 时间:
2020-04-16 00:18:24
阅读次数:
77