随笔分类 - 算法与数据结构
摘要:多级树的深度优先遍历与广度优先遍历(Java实现) [TOC] 深度优先遍历与广度优先遍历其实是属于图算法的一种,多级树可以看做是一种特殊的图,所以多级数的深/广遍历直接套用图结构的遍历方法即可。 工程中后端通常会用多级树来存储页面表单的各级联动类目,本文提供了深度遍历与广度遍历的示例,在使用时只要
阅读全文
摘要:字典树 字典树是一种树形结构,优点是利用字符串的公共前缀来节约存储空间。在这提供一个自己写的Java实现,非常简洁。 根节点没有字符路径。除根节点外,每一个节点都被一个字符路径找到。 从根节点到某一节点,将路径上经过的字符连接起来,为对应字符串。 每个节点向下所有的字符路径上的字符都不同 每个结点维
阅读全文
摘要:思路:按照上图两种情形分别进行二分查找 java public boolean search(int[] A, int target) { for (int i = 0; i
阅读全文
摘要:思路:就是模拟杀手杀人的过程,新开一个数组用于标记被杀死的位置。然后生成新的数组,直到平安夜来临。 java public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in
阅读全文
摘要:LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。 API的使用: 1. 首先是LinkedHashMap的构造器: 2. 重写removeEldestEntry方法
阅读全文
摘要:26进制加法(一) 'a' 'z'代表十进制的0 25,求26进制加法。例如 'z'+'bc'= 'cb' 博主思路: 首先将长度不同的字符串高位补'a' 从低位开始将字符转换为10进制相加 计算进位 将得到的字符串高位去'a' 两个字符串比较是否包含(二) 没啥好说的,用桶思想5分钟撸完。 jav
阅读全文
摘要:Heap是一种数据结构它是一个完全二叉树具有以下的特点: Min heap: 父节点的值小于或等于子节点的值; Max heap: 父节点的值大于或等于子节点的值; public class minAndMaxheap { //大根堆和小根堆的实现 //优先级队列默认是小根堆的实现 static c
阅读全文
摘要:学习数据结构的时候遇到一个经典的回文链表问题 对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。 如果有链表反转的基础,实现链表回文判断就简单的多,如果对反转链表不熟悉,可以参考这篇 "博客" 。 思路很简单,先找到链表的中间Node,采用的快慢指针
阅读全文
摘要:看到一个算法题— 给定一个字符串,问是否能通过添加一个字母将其变为回文串 贴上自己的实现思路: 这个添加字符可以是添在开头,也可以是添加在队尾,也可能是添加在中间 能通过添加一个字符使字符串变成回文字符串,也就意味着如果删掉字符串开头或结尾一个字符后,这个子串应该是回文字符串。 或者这个字符串本身是
阅读全文
摘要:理解单链表的反转(java实现) 要求很简单,输入一个链表,反转链表后,输出新链表的表头。 反转链表是有2种方法(递归法,遍历法)实现的,面试官最爱考察的算法无非是斐波那契数列和单链表反转,递归方法实现链表反转比较优雅,但是对于不了解递归的同学来说还是有理解难度的。 递归法
阅读全文