数据结构和算法
MR_LUXY
这个作者很懒,什么都没留下…
展开
-
快速排序复习
网上抄来抄去的博客乱七八糟的太多了,标准的写法,实现一个partition函数和一个sort函数。partition函数负责寻找每次的分割点,sort函数负责递归调用左右分段。partition函数需要传入一个初始选定的轴心下标,将其交换到数组末尾, 锚定一个分组下标(初始从最左边开始) 然后从数组左边到 [末尾-1] 的所有数字可以遍历一次来进行分组, 碰到比轴心值小的,就和锚定值交换,锚定下标往右移动,最后返回锚定的下标。上层sort函数对返回的锚定下标进行左右分组的sort,就完成原创 2021-08-01 15:57:16 · 171 阅读 · 0 评论 -
Leetcode 138 和 Java的深拷贝
今天做到leetcode的138题,题目是返回一个拥有随机指针的链表的深拷贝。由于我是用Java做的,先深入复习一下Java的对象拷贝机制。Java类型和浅拷贝Java的类型分为值类型和引用类型。其中值类型包括所有的基本类型,char, boolean, int, double, float, long, short, byte。其他的类、接口、枚举和数组等都是引用类型。...原创 2020-01-30 19:24:20 · 387 阅读 · 0 评论 -
Bloom Filter (布隆过滤器) 介绍以及简单的Java实现
定义布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。从简单的定义可以看出,使用布隆过滤器目的是为了优化元素查找的性能,不过布隆过滤器提升的是得到这个元素(key)的存在性的性能。...原创 2020-01-01 18:09:03 · 1020 阅读 · 4 评论 -
哈希的原理
哈希的原理和代价 哈希表和哈希函数是大学数据结构中的课程,实际开发中我们经常用到Hashtable这种结构,当遇到键-值对存储,采用Hashtable比ArrayList查找的性能高。为什么呢?我们在享受高性能的同时,需要付出什么代价(这几天看红顶商人胡雪岩,经典台词:在你享受这之前,必须受别人吃不了的苦,忍受别人受不了的屈辱),那么使用Hashtable是否就是一桩无本万转载 2015-02-26 14:24:58 · 808 阅读 · 0 评论 -
非递归遍历二叉树--java实现
经典数据结构--二叉树的遍历递归遍历二叉树只有三行代码,特别容易理解且特别容易实现,但是非递归就没有那么的一目了然,不过其实就是把递归的做法平铺开来而已。下面来看每一种顺序的做法。先序遍历:也就是先访问根节点,再左孩子,再右孩子。如何做呢,用手在纸上画一颗简单的二叉树,你会发现,先序遍历的顺序就是从根节点开始,一直访问左孩子,直到叶子(无孩子),然后访问这个叶子的父亲的右孩子(可能是子二叉原创 2015-09-17 17:35:46 · 599 阅读 · 0 评论 -
二叉树系列--层序遍历(java实现)
记录两道题目:第一题:计算二叉树的深度,两行递归即可搞定。public static int level(Node root) { if (root == null) return 0; return level(root.left) + 1 > level(root.right) + 1 ? level(root.left) + 1 : level(root.rig原创 2015-09-19 19:52:02 · 6413 阅读 · 0 评论 -
BitMap算法
对大量数据(超过内存上限的数据)的排序,典型的有外部排序,但是如果对不重复数据排序,还可以用bitmap算法。bitmap算法的思想就是用一个整型的32位中的每一位去记录一个数,所以,每一个整型可以记录32个数,这样可以大大的节省空间,更加官方的解释有很多博客都有记载,更可以参考《编程珠玑》。这里贴一下java的代码,都使用位运算。public class Bitmap { sta原创 2015-09-23 12:38:30 · 925 阅读 · 0 评论