摘要:
一、哈希函数 1.1 什么是哈希函数 哈希函数(Hash Function),也称为散列函数。是将一个大文件映射成一个小串字符。与指纹一样,就是以较短的信息来保证文件的唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。 举个例子: 服务器存了10个文本文件,你现在想判断一个新的文 阅读全文
摘要:
一、二叉树的遍历 1.1 先序遍历 先序遍历:按照根节点->左子树->右子树的顺序访问二叉树 【递归版】 怎么理解上述递归的先序遍历? 先打印当前节点,然后打印整颗左子树,然后再打印整颗右子树。上图二叉树的打印顺序为:1、2、4、5、3、6、7 实际应该怎么理解preOrderRecur()这个函数 阅读全文
摘要:
一、转圈打印矩阵 【题目】 给定一个整型矩阵matrix,请按照转圈的方式打印它。例如: 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11, 10 要求:额外空间复杂度为O(1)。 【分析】 用4个变量来标记左上角的点和右下角的点。 如果要打印这2个点形成矩阵的边界 阅读全文
摘要:
一、打印两个有序链表的公共部分 【题目】 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。 【分析】 假设有如下两个有序链表 整个流程是这样的:谁小动谁,一开始1<2,所以head1来到3的位置 此时2<3,所以head2来到3的位置 head1=head2,打印3,并且he 阅读全文
摘要:
前面讲的是比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。 一、桶排序(Bucket Sort) 1.1 桶排序介绍 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与 阅读全文
摘要:
一、用数组结构实现大小固定的栈 【核心思想】 栈结构是“后进先出”,有初始化栈、入栈、出栈、返回栈顶等功能,题目大意就是要求我们用数组实现栈的这些功能。 初始化栈:给定一个初始大小,创建一个栈。定义一个变量 size ,初始化为 0,用来记录栈中的元素数量。 入栈:如果 size 小于栈的大小,将要 阅读全文
摘要:
一、剖析递归行为 举个简单的例子来理解递归,以及系统上递归是怎么实现的。假设有个功能:在整个数组中找最大值。 这本是一个很简单的功能,我们可以直接用遍历的方式来完成。但如果把它改成递归的形式,又会是怎么样的呢? 递归思路:将数组分为左边L和右边R两个部分,L边的最大值为max左,R边的最大值为max 阅读全文
摘要:
这里所说到的Java中的排序并不是指插入排序、希尔排序、归并排序等具体的排序算法。而是指执行这些排序算法时,比较两个对象“大小”的比较操作。我们很容易理解整型的 i>j 这样的比较方式,但当我们对多个对象进行排序时,如何比较两个对象的“大小”呢?这样的比较 stu1 > stu2 显然是不可能通过编 阅读全文
摘要:
一、对数器的作用 对数器是通过用大量测试数据来验证算法是否正确的一种方式。在算法笔试的时候,我们经常只能确定我们写出的算法在逻辑上是大致正确的,但是谁也不能一次性保证绝对的正确。特别是对于一些复杂的题目,例如贪心算法,我们往往无法在有限时间内用数学公式来推导证明我们程序的正确性。而且在线的OJ一般只 阅读全文
摘要:
一、冒泡排序(Bubble Sort) 【原理】 比较两个相邻的元素,将值大的元素交换至右端。 【思路】 依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将 阅读全文
摘要:
时间复杂度就是用来评价算法流程的标准,你可以随意脑补一个算法,它的正确性保证了后,你怎么去评价整个流程的好坏?就是用时间复杂度来评价的。介绍时间复杂度之前,我们先解释一下常数时间的操作, 比如,数组寻址操作、加减乘除操作、位运算操作,这些是和样本的数据量无关,你每次完成这些操作都是固定时间。比如说机 阅读全文
摘要:
一、类加载器 1.1 类的加载 当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。【加载 】 就是指将class文件读入内存,并为之创建一个Class对象。任何类被使用时系统都会建立一个Class对象。【连接】 验证:是否有正确的内部结构, 阅读全文