数据结构与算法
文章平均质量分 84
_present
today is present
展开
-
关于求子数组最大长度问题的三种经典题型
这里写目录标题1、和为k的子数组的最大长度,数组中的元素可正、可负、可02、和为k的子数组的最大长度,数组中的元素都是正数3、和小于k的子数组的最大长度,数组中的元素可正、可负、可01、和为k的子数组的最大长度,数组中的元素可正、可负、可0思路:假设存在和为k的最长子数组,索引范围i~j,那么下面的式子必然存在:k = 子数组[0~j]的和 - 子数组[0~i]的和因此我们可以遍历数组求子数组[0~i]{0 < i < n}的累加和,每次获取了累加和后就可以判断有没有以i结尾的和为k的子原创 2021-01-06 11:58:01 · 608 阅读 · 0 评论 -
手撸LFU缓存结构,哈希表+二维链表
什么是LFU?当内存不足时,优先删除被操作次数最少的元素。数据结构设计哈希表 + 二维双向链表二维链表维护不同访问次数和相同访问次数结点集合之间的关系。每一列的双向链表是所有出现操作次数相同的节点的集合,次数链表的头节点之间也相互连接的,同样构成双向链表。二维链表的结构:链表中Node结点的设计:public static class Node { Integer key; Integer value; Integer原创 2020-11-16 15:07:34 · 367 阅读 · 0 评论 -
手撸LRU缓存结构,哈希表+双链表
要求:添加、获取、删除元素的时间复杂度为O(1),采用LRU内存淘汰策略。数据结构设计哈希表+双向链表双向链表的Node类型设计:public static class Node<K, V>{ K key; V value; Node pre; Node next; public Node(K key, V value) { this.key = key; this.value = value; }}原创 2020-11-12 21:41:35 · 285 阅读 · 0 评论 -
堆排序以及堆数据结构的优势
我们要了解堆排序,必须要知道堆这个伟大的数据结构。堆是一个非常重要的数据结构,可以被看做一棵完全二叉树的数组对象。我们的数据实际上在逻辑上可以根据数组的索引构建出为一颗完全二叉树,结点的位置与索引之间的关系是:i位置结点的左孩子在数组中的位置是:(2 * i) + 1,右孩子在数组中的位置是:(2*i)+2i位置结点的父节点在数组中的位置是:(i-1) / 2。堆的类型有两种:1)大根堆:每个二叉树的中的根结点是最大的。2)小根堆:每个二叉树的中的根结点是最小的。堆有两个非常重要的方法:原创 2020-10-24 21:46:01 · 2229 阅读 · 0 评论