算法
文章平均质量分 86
码农Ralap
这个作者很懒,什么都没留下…
展开
-
算法 - 栈/队列
栈/队列基于链表基于数组设计栈(队列),push,pop,getMin时间复杂度为O(1)如何仅使用队列实现栈的功能如何仅使用栈实现队列功能 相信大家都清楚,栈是先进后出,队列是先进先出。具体该怎么实现这两种数据结构呢? 我们可以基于双向链表,或者数组实现: 基于链表 基于双向链表也可以实现队列: 使用链表的方式,可以实现队列的增强,不仅限于队列头添加节点,队尾弹出节点,在队列的任意节点都可以很方便的实现节点的添加和删除,进需要调整下当前节点的pre和next指针。 栈的实现也是一样,只是栈从头部进,从头原创 2021-02-18 13:12:58 · 131 阅读 · 0 评论 -
算法 - 链表
链表单链表反转双向链表反转单链表删除某一个值的节点单链表,链表长度为基数则返回中点元素,偶数则返回上中点元素单链表,链表长度为基数则返回中点元素,偶数则返回下中点元素单链表,链表是否是回文结构 单链表反转 将链表的头结点变成尾结点 /** * 翻转单链表 * * @param head * @return */ public static Node reverseLinkedList(Node head) { // 预存前节点原创 2021-02-18 13:10:51 · 349 阅读 · 1 评论 -
算法 -前缀树
前缀树 假设我们现在有字符"a",“ab”,“ac”,“bc”,“123”,“35”,“73”,问: 以"a" 开头的字符有多少个? 是否有以"3"字符结尾的? 是否存在"235"这样的字符? 针对这种,我们可以根据所有字符,构建出一颗字符的前缀树: 我们可以以每一个字符,构建出一个节点,每一个节点包含两条信息:through:通过该节点的数量,end:以该节点结尾的数量。 我们先来处理字符"a": 由于我们在当前的tree中还没有“a”这个字符,我们先创建出这一点一个节点: 由于“a"经过root原创 2021-02-17 18:03:14 · 325 阅读 · 0 评论 -
算法 - 排序
排序选择排序冒泡排序插入排序归并排序快速排序 选择排序 什么是选择排序?选择排序,就是从一堆数中有选择的挑选出最小的那个数。 算法核心思想: 每一次遍历,找出所有数字中最小的那个,放到最前面去。 假设现有数组:a[] = [6,3,4,2,1,5] 数组总长度 n = 6; 第一次:index=0,从a[]下标为 0 -> (n-1)中选出最小的数字,放到index处,即a[0]和a[4]数值交换 a[]=[1,3,4,2,6,5],此时a[0]为所有数字的最小值 第二次:index=1,从a[]下标原创 2021-02-17 16:53:21 · 91 阅读 · 0 评论 -
算法 - 运算符
运算符与 &保留右边第一个1,其他全部置为0计算二进制中1的个数异或^交换数值如何不借用第三方变量找到唯一出现奇数次的那个数找出出现奇数次的两个数 与 & 与操作,二进制位上如果不相同则记为0: 1001 & 1101 =1001 保留右边第一个1,其他全部置为0 现有数字A = 100010001100100,需要保留右边第一个1,其他全部置为0: 先对A进行取反: ~A=011101110011011 取反后+1 :~A+1 = 011101110011100 再与A: (~A原创 2021-02-16 23:49:26 · 375 阅读 · 0 评论