哈希表
哈希表哈希映射
面试题10.02变位词组
最长回文串
哈希映射不使用任何内建的哈希表库设计一个哈希映射
具体地说,你的设计应该包含以下的功能
put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。remove(key):如果映射中存在这个键,删除这个数值对。
示例:
MyHashMap hashMap = new MyHashMap();hashMap.put(1, 1);hashMap.put(2, 2);hashMap.get(1); // 返回 1hashMap.get(3); // 返回 -1 (未找到)hashMap.put(2, 1); // 更新已有的值hashMap.get(2); // 返回 1hashMap.remove(2); // 删除键为2的数据hashMap.get(2); // 返回 -1 (未找到)
实现一个 ...
算法——查找算法
哈希、红黑树、B+树、二叉树、平衡算法
搜索算法
二分查找二分查找一定是有序的:target ? (left+right)/2
如果说二分查找转换成数据结构展示——>==二叉树—->二叉查找树、二叉搜索树==
二叉搜索树1. 时间复杂度:二分:log(n)
AVL树:平衡二叉树红黑树(特殊的二叉查找树)这篇文章还在编辑中······
本文结束!
Manacher算法
Manacher算法
求最长子回文串
转载声明:@刘毅 (Ethson Liu)
算法过程分析由于回文分为偶回文(比如 bccb)和奇回文(比如 bcacb),而在处理奇偶问题上会比较繁琐,所以这里我们使用一个技巧,具体做法是:
在字符串首尾及每个字符间都插入一个 “#”,这样可以使得原先的奇偶回文都变为奇回文;
接着再在首尾两端各插入 “$” 和 “^”,这样中心扩展寻找回文的时候会自动退出循环,不需每次判断是否越界,可参见下面代码。
上述新插入的三个字符,即 “#”、 “$” 和 “^”,必须各异,且不可以与原字符串中的字符相同。
举个例子:s="abbahopxpo",转换为 s_new="$#a#b#b#a#h#o#p#x#p#o#^"。如此,s 里起初有一个偶回文 abba 和一个奇回文 opxpo,被转换为 #a#b#b#a# 和 #o#p#x#p#o#,长度都转换成了奇数。
定义一个辅助数组 int p[],其中 p[i] 表示以 i 为中心的最长回文的半径,例如:
i
0
1
2
3
4
5
6
7
8
9
10 ...
红黑树🌲
R-B Tree🌲
R-B Tree,全称Red-Black Tree,又称为”红黑树”,一种特殊的二叉树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(black)
转载声明:https://www.cnblogs.com/skywang12345/p/3245399.html
红黑树的优势红黑是用非严格的平衡来换取增删节点时候旋转次数的降低,任何不平衡都会在三次旋转之内解决,而AVL是严格平衡树,因此在增加或者删除节点的时候,根据不同情况,旋转的次数比红黑树要多。所以红黑树的插入效率更高!!!
红黑树这种数据结构应用十分广泛,在多种编程语言中被用作符号表的实现,如:
Java中的java.util.TreeMap,java.util.TreeSet;
C++ STL中的:map,multimap,multiset;
.NET中的:SortedDictionary,SortedSet 等。
红黑树的特性(1) 每个节点或者是黑色,或者是红色
(2) 根节点是黑色
(3) 每个叶子节点(nil)是黑色
(4) 如果一个节点是红色的,则它的子节点必须 ...
链表
链表学习记录,若有不足请指出来
1 结点结构123456// Definition for singly-linked list.struct SinglyListNode { int val; SinglyListNode *next; SinglyListNode(int x) : val(x), next(NULL) {}};
2 操作与数组不同,我们无法在常量时间内访问单链表中的随机元素。 如果我们想要获得第 i 个元素,我们必须从头结点逐个遍历。 我们按索引来访问元素平均要花费O(N)时间,其中 N 是链表的长度。
添加操作-单链表
令插入结点的next为其插入位置下结点
原位置下一节点为要插入的结点即可
与数组不同,我们不需要将所有元素移动到插入元素之后。因此,您可以在 O(1) 时间复杂度中将新结点插入到链表中,这非常高效。
删除操作-单链表12//删除prev的下一结点prev->next == prev->next ->next;
删除第一个结点12SinglyListNode * ...
BFS和DFS算法(基础)
深度优先搜索算法和广度优先搜索算法
设计模式
学习设计模式之前需要知道什么?
数据结构——栈和队列
栈栈的定义与运算
栈是只允许在线性表的一段进行插入和删除的线性表。表中值允许插入和删除的一段称为栈顶命令一段称为栈底。
由于只能在栈顶进行插入和删除操作,使得后进栈的元素先出栈,先进栈的元素后出栈,所以栈是一种后进先出(Last In First Out,简称LIFO)的数据结构。有关栈的应用都是基于这一特性。
栈的操作通常称为入栈或进栈,其删除操作称为出栈或退栈。当栈中五元素是,称为空栈。
有关栈的基本操作主要有以下几种:
1. 栈的初始化操作,即建立一个空栈S
2. 判空栈操作,弱S为空栈,返回一个真值
3. 进栈操作,在S栈顶插入一个元素X
4. 出栈操作,若栈S不空,则取栈顶元素(栈顶元素不删除)。
栈的顺序存储结构(又称为顺序栈)类似于线性表的顺序存储结构。
队列双队列实现栈的操作:
12345678910111213141516171819202122232425262728293031323334353637383940414243444546class MyStack { queue<int> queue1; qu ...
设计模式之行为型模式
行为型模式
学习笔记之C++设计模式——创建型模式
📑 设计模式之结构型模式
📑 设计模式之创建型模式
总的来说,行为型模式就是用来对类或对象怎样交互和怎样分配职责进行描述。
模板方法模式
AbstractClass(抽象类):在抽象类中定义了一系列基本操作(PrimitiveOperations),这些基本操作可以是具体的,也可以是抽象的,每一个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架,模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。
ConcreteClass(具体子类):它是抽象类的子类,用于是现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中的已经实现的具体基本操作。
模板方法案例
代码12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505 ...
设计模式之结构型模式
.dimitt:hover:after{
}
结构型模式
学习笔记之C++设计模式——创建型模式
📑 设计模式之结构型模式
📑 设计模式之行为型模式
Proxy模式又叫做代理模式,是构造型的设计模式之一, 它可以为其他对象提供-种代理( Proxy )以控制对这个对象的访问。所谓代理,是指具有与代理元(被代理的对象)具有相同的接口的类,客户端必须通过代理与被代理的目标类交互,而代理一-般在交互的过程中 (交互前后) , 进行某些特别的处理。
代理模式
通俗理解就和海外代购类似,由一个海外代购专门负责所有需要从其他国家购买的这个行为。
以下为代理模式案例及其代码:
点击查看123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102// 代 ...