![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
ppp11
在校大学生 在湖南工业大学
展开
-
布隆过滤器
现学现卖。很不全的介绍。文末参考其他的博客布隆过滤器的之前 hashmap hashmap在查询中非常快,平均近似O(1),但现在的数据很大,远远超过内存的大小。所以数据都保存在hashmap中不现实。 缓存穿透 一般公司的架构是,客户端发送请求,服务端会从缓存redis等服务器中查找,如果没有在从mysql中查找,如果查找到...原创 2019-11-01 17:38:19 · 119 阅读 · 0 评论 -
0-1背包,完全背包,多重背包问题
今天看到背包问题。特记录下整理下自己的理解。方便以后查阅自己算法的理解。 看背包问题,主要是它是用到动态规划,动态规划是能把问题划分为子问题。也就是状态转移方程。更多了动态规划,查看其他的博客或者文档。 问题描述:一个背包的总容量为V,现在有N类物品,第i类物品的重量为weight[i],价值为value[i]那么往该背包里装东西,怎样装才能使得最终包内物品的总价值...原创 2019-11-01 15:19:13 · 171 阅读 · 0 评论 -
求滑动窗口中最大的值
题目:给定一个数组nums,有一个滑动大小为k的窗口从左往右滑动。每一次走一步,求窗口中最大的值。分享三种思路:1.是暴力解法 每次滑动窗口,遍历窗口中k个数的最大值。public int[] maxSlidingWindow(int[] nums, int k) { if (nums == null || nums.length == 0) { ret...原创 2019-10-05 19:31:35 · 169 阅读 · 0 评论 -
图的深度优先遍历和广度优先遍历
图在数据结构中是很重要的一部分。通过不同的遍历方法,得到不同的遍历结果。图的遍历可以分为两种,深度优先遍历和广度优先遍历。图的表示可是链表也可以是矩阵。链表:是结点和边的组合矩阵是二维数组:a[i][j]表示i结点到j结点是否连通图可分为有向图和无向连通图。今天介绍无向连通图的两种遍历方法(java实现):图的定义://结点,按照有向图完整定义pu...原创 2019-09-29 11:07:42 · 467 阅读 · 0 评论 -
二叉树之完全二叉树
1.完全二叉树定义:除了空树外,树的高度差不超过1,如果叶子节点不全,则都在左边。如下图:图1是完全二叉树,图2,3不是完全二叉树public booelan isCBT(Node head){ if(head == null){ return true; } Queue<Node> q = new LinkedList&...原创 2019-09-26 08:39:38 · 176 阅读 · 0 评论 -
二叉树之搜索二叉树
1,搜索二叉树 定义:当前节点大于左子树节点和小于右子树节点的二叉树是搜索二叉树。 优势就是,查找的时间复杂度是log(n)根据二叉搜索树的性质,它的中序遍历,得到的值应该是有序的。2.代码实现判断二叉树是否是搜索二叉树 中序遍历实现public class Node { public int value; public Node left; ...原创 2019-09-25 13:40:59 · 90 阅读 · 0 评论 -
二叉树介绍和前序,中序,后序的递归和非递归遍历
什么是二叉树: 二叉树是每个结点最多有两个结点的树结构。如下就是一颗树结构。二叉树可以做什么: 用的最多的是二叉平衡树,有种特殊的二叉平衡树就是红黑树,Java集合中的TreeSet和TreeMap,C++STL中的set,map以及LInux虚拟内存的管理,都是通过红黑树去实现的,还有哈弗曼树编码方面的应用,以及B-Tree,B+-Tree在文件系统中的应用。当然二叉...原创 2019-09-24 10:16:04 · 262 阅读 · 0 评论 -
之字形打印矩阵
给一个矩阵之字形打印输出:如下矩阵{ { 1, 2, 3, 4 },{ 5, 6, 7, 8 },{ 9, 10, 11, 12 } };输出的顺序是:自己编程实现:private static void printZigZagMatrix(int[][] matrix) {//x1,y1,是矩阵中数字的坐标。 int x1 = 0; int y1 = ...原创 2019-09-17 09:48:50 · 100 阅读 · 0 评论 -
求top N算法
求topN在大数据中很常见,主要思路有三种: 1.先排序,在遍历出最大或最小的N个 2.通过大小堆,维持一个N个大小的堆,每次和堆顶元素比较,在堆化 3.中位数的中位数算法BFPRT,第一种,先排序,排序算法有很多,冒泡排序,快速排序等。时间复杂度是 O(n*log n),这里不详讲。第二种,用大小堆,维持一个大小堆,元素个...原创 2019-09-10 15:17:26 · 1679 阅读 · 0 评论 -
求回文字符串
回文字符串是正反读都一样。本文是求字符串最长回文字符串我有两种思路: 1.从当前字符开始,两个索引一个向后,一个向前,比较字符。这有分为两种情况,一个是回文字符串长度为偶数,一个是回文字符串长度为奇数。比如 "abba","aba",偶数个时中心在字符bb中间,奇数个时在b位置。因此需要考虑两种情况。遍历时,那种情况的回文字符串长度大就返回那个回文字符串。 2.通过...原创 2019-09-10 13:24:26 · 206 阅读 · 0 评论 -
KMP算法,求二叉树是否是子树
KMP算法是高效的字符串比较算法, 二叉树是有左右两个子节点的特殊结构,像树的叶子一样。 问题是给定两个二叉树,求二叉树是否是另一个二叉树的子树。 一种可行的思路是: 把二叉树序列化为字符串,在比较两个字符串,如果字符串在另一个字符串中匹配了,那么说明这个二叉树是另一个二叉树的子树。两个字符串比较用的kmp算法...原创 2019-09-10 10:38:44 · 206 阅读 · 0 评论 -
字符串匹配之KMP算法
给定一个字符串和一个文本,在文本中找出这个字符串的位置。最直接的解法是暴力遍历字符串。时间复杂度是o(n*m)暴力解法: 字符串,文本从头开始一个一个字符串匹配,当字符串中和文本中字符不匹配,开始回溯到文本这一个开始比较位置的下一个字符和字符串开始字符串比较。知道遍历完文本,或者找出匹配的位置。暴力解法时间复杂度高。下面介绍字符串匹配KMP算法。 KMP...原创 2019-09-09 16:45:03 · 90 阅读 · 0 评论 -
括号生成
题目:给出n代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。示例n = 3, 结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]题目有点难。理顺一下思路,终于实现,并通过。思路: 递归 难点:a.怎么生成括号组合字符串, ...原创 2019-09-03 16:46:03 · 86 阅读 · 0 评论 -
合并两个有序链表
1,leetcodecn上合并两个有序链表:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4def mergeTwoLists(l1, l2): head = None ...原创 2019-09-03 14:26:53 · 69 阅读 · 0 评论 -
四数之和
1.给定一个 n 个整数的数组nums和目标值target,判断nums中是否存在四个元素和值与target相等?找出所有满足条件且不重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为:[[-1, 0, 0, 1],[-2, -1, 1, 2],[-2, 0, 0, 2]]...原创 2019-09-02 17:22:46 · 88 阅读 · 0 评论 -
电话号码的字母组合
1.给定一个仅包含数字2-9的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]. def letterCombinations(digits): ss = ['',...原创 2019-09-02 16:44:26 · 126 阅读 · 0 评论 -
三个数之和,最接近目标数的算法python实现
1.给定一个数组和目标数,求数组中三个数之和最接近目标数的和,假设数组至少有一组和满足条件。 nums.sort() l = len(nums) sum = nums[0] + nums[1] + nums[2] for i in range(0,l - 2): if nums[i] == nums[i +...原创 2019-09-02 16:12:22 · 1044 阅读 · 0 评论 -
希尔排序,拓扑排序
1.希尔排序 希尔排序,是从0位置开始依次取数组中步长gap的两个数,然后做比较大小,如果逆序就交换。初始gap是数组长度除以2,以后是每次迭代除以2.当最后gap为1时,比较完,数组就排序好了。如上的数组[2,4,1,0,9,3,5,7,6],用希尔排序,gap分为4,2,1,最后把数组排序好。相同的颜色表示两个数据交换位置。时间复杂度计算:迭代计算的次数等于取整,每次比...原创 2019-08-30 17:18:38 · 132 阅读 · 0 评论