- 博客(60)
- 收藏
- 关注
原创 哈希表
哈希表充分体现了算法设计领域的经典思想:空间换时间。 ①哈希函数的设计:“键”通过哈希函数得到的“索引”分布越均匀越好。对整型:小范围正整数直接使用。小范围负整数可以进行偏移为正整数。大整数,可以通过取模的方式,只取后几位。(模一个素数,可以让结果尽量均匀分布)对浮点型:转为整型处理。对字符串:转为整型对复合类型:转为整型(...
2019-01-09 21:56:31 195
原创 LeetCode之387. 字符串中的第一个唯一字符
参考知识:哈希表 题目描述:给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。案例:s = "leetcode"返回 0.s = "loveleetcode",返回 2. 注意事项:您可以假定该字符串只包含小写字母。 解答:class Solution { public int firstUniqCh...
2019-01-09 20:58:51 227
原创 红黑树
目录红黑树2-3树红黑树红黑树2-3树基于二分搜索树(二叉查找树),实现的一棵绝对平衡的树。 参考:二分搜索树注:二叉查找树是向下生长,而2-3树是向上生长。目的:为了解决二分搜索树的不平衡性(二分搜索树在最坏情况下可能退化成链表)。2节点:含有一个键(及值)和两条链接,左链接指向的2-3树中的键都小于该结点,右链接指向的2-3树中的键都大于该结点。3...
2019-01-09 15:17:07 282
原创 自定义AVL树(2):实现集合(Set)与映射(Map)
通过AVL树的方式实现自定义集合(Set)和自定义映射(Map)。 参考:自定义集合(Set) Set.java参考:自定义映射(Map) Map.java参考:自定义AVL树 AVLTree.java 包结构:实现自定义集合(Set):package AVL;public class AVL...
2019-01-03 22:57:11 444
原创 自定义AVL树(1)
通过学习自定义平衡二叉树,了解平衡二叉树这一数据结构。AVL树是以二分搜索树为基础的改进。参考:二分搜索树之前的线段树、堆(基于完全二叉树)都是平衡二叉树。 平衡二叉树,又称AVL树,它是一种特殊的二分搜索树(或叫二叉排序树)。AVL树或者是一棵空树,或者是具有以下性质的二叉树:(1)左子树和右子树都是平衡二叉树;(2)左子树和右子树的深度(高度)之差的绝对值不超过1。...
2019-01-03 22:43:32 204
原创 自定义并查集
一种特殊的多叉树。主要支持两个方法:①union(p,q) ②isConnected(p,q) find方法中的路径压缩: 基于rank的优化: 以 union(4,2)为例: 将层数最少的元素2的根节点,指向层数较多的元素4的根节点。 首先是这样的 ...
2019-01-03 19:46:48 155
原创 LeetCode之211. 添加与搜索单词 - 数据结构设计
参考知识: 字典树(前缀树) 题目描述:设计一个支持以下两种操作的数据结构:void addWord(word)bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。示例:addWord("bad")addWord("dad")addWord("mad")...
2019-01-03 16:15:25 234
原创 LeetCode之208. 实现 Trie (前缀树)
参考知识: 字典树(前缀树) 题目描述:实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。示例:Trie trie = new Trie();trie.insert("apple");trie.search("apple"); // 返回 truetrie.search("app"); // ...
2019-01-03 15:49:58 188
原创 自定义字典树(前缀树)
通过学习自定义字典树,了解字典树这一数据结构。 之前的二分搜索树(二叉树)、堆(完全二叉树)、线段树(平衡二叉树)都是基于二叉树。而字典树是一种多叉树。 如果有n个条目,使用树结构查询的时间复杂度为O(log n),如果有100万个条目(2^20),log n 大约为20; 而使用Trie(字典树)的时间复杂度与有多少条目无关,为O(w),w为查询单词的长度(大多数单词的...
2019-01-03 12:00:48 274
原创 LeetCode之303. 区域和检索 - 数组不可变
参考知识:线段树(但本题其实是一个不可变数组,所以可以不用线段树) 题目描述:给定一个整数数组 nums,求出数组从索引 i 到 j (i ≤ j) 范围内元素的总和,包含 i, j 两点。示例:给定 nums = [-2, 0, 3, -5, 2, -1],求和函数为 sumRange()sumRange(0, 2) -> 1sumRange(2, 5...
2019-01-02 23:06:12 186
原创 自定义线段树(区间树)
通过学习自定义线段树(区间树),了解线段树这一数据结构。线段树首先是平衡二叉树。 用例:查询一个区间[i,j]的最大值,最小值,或者区间数字和等。实质:基于区间的统计查询。为什么用线段树: 使用数组实现 使用线段树 更新 O(n) O(log n) ...
2019-01-02 22:49:39 203
原创 LeetCode之347. 前K个高频元素
参考知识:优先队列 (通过最大堆实现的)优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator)。Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过最小堆...
2019-01-02 20:04:09 252
原创 自定义堆(2):通过堆实现优先队列
学习堆、优先队列之间的关系。 普通队列:先进先出;后进后出。优先队列:出队顺序和入队顺序无关,和优先级相关。 入队 出队(拿出最大元素) 之前自定义的普通线性结构 O(1) O(n) 之前自定义的顺序线性结构 O(n) O(1) 堆 O(log n) O(log n) 此外:优先队列应用的经典问题是:在N个元素...
2019-01-01 23:20:29 162
原创 自定义堆(1):实现最大堆
通过学习自定义堆,了解堆的数据结构。 本篇以最大堆为例。底层依赖了自定义数组, 参考:自定义数组 中的 Array.java所以,其时间复杂度分析: add O(log n) extractMax O(log n) replace O(log n) ...
2019-01-01 23:04:54 475
原创 LeetCode之350. 两个数组的交集 II
运用的知识: 映射 。 参考:自定义映射(Map) 题目描述:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2,2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [4,9]说明:...
2018-12-29 14:10:49 109
原创 LeetCode之349. 两个数组的交集
运用的知识:集合 。 参考:自定义集合(Set) 题目描述:给定两个数组,编写一个函数来计算它们的交集。示例 1:输入: nums1 = [1,2,2,1], nums2 = [2,2]输出: [2]示例 2:输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]输出: [9,4]说明:输出结果中的每个元素一定是唯一的...
2018-12-29 13:53:30 110
原创 自定义映射(Map)
通过学习自定义映射,了解映射的数据结构。 本篇分别以链表的方式和以二分搜索树的方式实现了映射。 首先写一个映射的接口,描述其具有的基本功能。Map.java然后写一个接口的实现类:其中,方式一: 用的是链表的方式。 LinkedListMap.java 方式二:用的是二分搜索树的方式。 BSTMap.java 方式一与方式二的时间复杂度分析:其中: ...
2018-12-29 13:36:55 922
原创 LeetCode之804. 唯一摩尔斯密码词
运用的知识: 集合。 参考:自定义集合题目描述:国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: "a" 对应 ".-", "b" 对应 "-...", "c" 对应 "-.-.", 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[".-","-...","-.-.
2018-12-28 23:19:15 148
原创 自定义集合(Set)
通过学习自定义集合,了解集合的数据结构。 本篇分别以链表的方式和以二分搜索树的方式实现了集合。 首先写一个集合的接口,描述其具有的基本功能。Set.java然后写一个接口的实现类:其中,方式一: 用的是链表的方式。 LinkedListSet.java 用到了 自定义链表 中的 LinkedList.java方式二:用的是二分搜索树的方式。 ...
2018-12-28 22:50:00 1023
原创 自定义树(2):二分搜索树(Binary Search Tree)
二分搜索树也是一种二叉树。 二分搜索树的遍历: 层序遍历图解: 删除任意元素图解: 代码实现:package BST;import java.util.LinkedList;import java.util.Queue;public class BinarySearchTree<E extends Com...
2018-12-28 17:21:52 370
原创 自定义树(1):二叉树
通过学习自定义树,了解与树相关的数据结构。 1)树:n(n>=0)个结点的有限集。结点的度:结点拥有的子树的数目叶子结点(终端结点):度为0的结点分支结点(非终端结点):度不为0的结点树的度:树中各结点的度的最大值层次:根结点的层次为1,其余结点的层次等于该结点的双亲结点的层次加1树的深度(高度):树中结点的最大层次2)森林是指m(m>=0)...
2018-12-28 14:21:22 240
原创 LeetCode之203. 移除链表元素
运用的知识:链表 参考:自定义链表题目描述:删除链表中等于给定值 val 的所有节点。示例:输入: 1->2->6->3->4->5->6, val = 6输出: 1->2->3->4->5 方式一:不用虚拟头结点(比较繁琐,需要单独对第一个节点进行判断。)/** * Definition for...
2018-12-27 17:17:16 96
原创 自定义链表(3):用链表的方式实现队列
通过学习自定义链表,了解链表的数据结构。本篇以链表的方式实现队列。(参看数组队列 ,以及 循环队列) 首先写一个队列的接口,描述其具有的基本功能。参看 自定义队列:Queue.java然后写一个接口的实现类,这只是其中一种实现方式。LinkedListQueue.java最后写一个测试类,测试自定义队列的效果。Test.java LinkedListQueue...
2018-12-26 22:38:05 282
原创 自定义链表(2):用链表的方式实现栈
通过学习自定义链表,了解链表的数据结构。本篇以链表的方式实现栈。(参看以数组的方式实现栈) 虽然自定义链表(1)中的链表的时间复杂度都为O(n),但若只对链表的表头进行增、删、查,都为O(1),利用这一点,可以用来实现栈。 首先写一个栈的接口,描述其具有的基本功能。Stack.java然后,引用自定义链表(1)中的: LinkedList.java然后写一个接口的...
2018-12-26 22:16:49 178
原创 自定义链表(1)
通过学习自定义链表,了解链表的数据结构。首先写一个链表类 :LinkedList.java最后,测试: Test.java、 知识点:1.链表的内部维护了一个节点Node类。该类包括数据域和指针域(指针域指向下一个Node节点)2.通常需要一个虚拟头结点,但不是必须的。 结构:LinkedList.java:package LinkedList...
2018-12-26 21:53:18 484
原创 自定义队列(2):循环队列
通过学习自定义队列,了解队列的数据结构。首先写一个队列的接口,描述其具有的基本功能。Queue.java然后写一个接口的实现类,这只是其中一种实现方式,为循环队列。LoopQueue.java最后写一个测试类,测试自定义数组队列的效果。Test.java 在 自定义队列(1):数组队列 这篇文章中,数组队列的dequeue()方法的时间复杂度为O(n),这是因为,数组队列中,每...
2018-12-26 17:22:14 239
原创 自定义队列(1):数组队列
通过学习自定义队列,了解队列的数据结构。首先写一个队列的接口,描述其具有的基本功能。Queue.java然后写一个接口的实现类,这只是其中一种实现方式,为数组队列。ArrayQueue.java最后写一个测试类,测试自定义数组队列的效果。Test.java整个栈的实现,借助了 自定义数组 这篇文章的类。Array.java结构:Queue.java:packag...
2018-12-26 16:23:37 393
原创 LeetCode之20. 有效的括号
运用的知识:栈 参考:自定义栈 题目描述:给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true...
2018-12-26 11:11:27 109
原创 自定义栈:用自定义的静态数组的方式
通过学习自定义栈,了解栈的数据结构。首先写一个栈的接口,描述其具有的基本功能。Stack.java然后写一个接口的实现类,这只是其中一种实现方式。ArrayStack.java最后写一个测试类,测试自定义栈的效果。Test.java整个栈的实现,借助了 自定义数组 这篇文章的类。Array.java结构如下: Stack.java:package algorith...
2018-12-26 10:24:34 197 2
原创 自定义数组
通过学习自定义数组,了解数组的数据结构。package algorithm;public class Array<E> { private E[] data; private int size;//数组的实际大小 /** * 无参的构造函数,默认初始容量 */ public Array() { this(10);//默认初始容量为10 } /** ...
2018-12-25 22:33:44 2177
原创 Hibernate总结
目录1.概述1.1对象持久化的3中方式1.2对象关系映射ORM1.3Hibernate工作原理2.核心接口2.1 Configuration类2.2 SessionFactory接口2.3 Session接口2.4 Transaction接口3.总结3.1对象的三种状态3.2 get、load的区别1.概述1.1对象持久化的3中方式①序列...
2018-12-25 10:52:49 328
原创 用notepad++将代码高亮粘贴到word中
目标:实现在word中看代码如同在IDE工具中一样,如图所示:如果只是简单的复制代码,粘贴到word中,关键字、注释等等,格式一致,不易阅读。如图,只是复制代码(Ctrl+c):然后直接粘贴(Ctrl+v)到word中: 怎么做呢?1.复制notepad++中的代码(Ctrl+c)2.点击菜单栏中的插件→NPPExport→Copy RTF to clipb...
2018-12-11 21:22:19 9733 5
原创 截图与贴图神器:Snipaste
官网地址:https://zh.snipaste.com/安装必读:https://docs.snipaste.com/#/zh-cn/troubleshooting使用必读:https://docs.snipaste.com/#/zh-cn/getting-started
2018-11-22 17:36:59 1124 1
原创 Struts学习笔记(一):搭建struts
目录1.在web项目的lib文件夹中引入Struts-jar包2.在web.xml中,引入Struts的核心功能3.开发Action类4.配置Action类5.启动tomcat服务器,打开浏览器验证:我的MyEclipse版本:1.在web项目的lib文件夹中引入Struts-jar包在Apache官网下载Struts:分别下载jar包和源代码,便于在m...
2018-11-21 20:32:11 156
原创 javaweb学习笔记(二十二):servlet监听器与国际化
目录1.监听器2.国际化2.1 java.util.Locale类2jstl标签库中的国际化与格式化标签1.监听器1)监听器: 是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即被执行。在servlet中,用于监听的事件源分别为 ServletContext, Http...
2018-11-14 18:11:30 161
原创 javaweb项目中引入CKeditor组件
CKeditor的安装与使用 for jsp:FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。一、下载CKEditor http://download.cksource.com/CKEditor/CKEditor/打开连接往下拉,可以找到最新的版本。 下载zip包,并解压。 二、安装CKEditor ...
2018-11-13 17:47:20 907 1
原创 javaweb学习笔记(二十一):servlet 过滤器
目录1.实现过滤器2.Filter实现拦截的原理3.filter的web.xml配置4.filter的生命周期Servlet过滤器就是服务器与客户端请求与响应的中间层组件,在实际项目开发中Servlet过滤器主要用于对浏览器的请求进行过滤处理,将过滤后的请求再转给下一个资源。通过过滤器,可以实现例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从...
2018-11-13 17:10:08 405
原创 javaweb学习笔记(二十):分页
分页:分页,是一种将所有数据分段展示的技术,用户每次看到的是通过分页展示的一部分。通过分页技术的实现,一方面充分利用和学习各种优化工具,并加深对jDBC的理解;另一方面,熟悉web开发的流程。 实现思路流程:0.准备0.1)在WEB-INF下新建lib文件夹,导入所需的jar文件,并添加到build path 中。0.2)在src下编辑c3p0-config.xml文件...
2018-11-12 16:48:23 273
原创 javaweb学习笔记(十九):连接池
目录1.连接池概念2.自定义连接池3.连接池组件之DBCP4.连接池组件之C3P01.连接池概念数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接(初始连接数),当需要建立...
2018-11-10 16:45:45 672
原创 javaweb学习笔记(十八):JDBC(4)
DbUtils组件O/R Mapping:广义上,ORM指的是面向对象的对象模型和关系型数据库的数据结构之间的相互转换。狭义上,ORM可以被认为是,基于关系型数据库的数据存储,实现一个虚拟的面向对象的数据访问接口。理想情况下,基于这样一个面向对象的接口,持久化一个OO对象应该不需要要了解任何关系型数据库存储数据的实现细节。 常用O-R Mapping映射工具:①Hibern...
2018-11-08 11:09:44 155
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人