随笔分类 -  Algorithms

摘要:题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。 分析:首先考虑这个问题的一个简单版本:一个数组里除了一个数字之外,其他的数字都出现了两次。请写程序找出这个只出现一次的数字。这个题目的突破口在哪里?题目 阅读全文
posted @ 2016-11-03 20:34 Evil_XJZ 阅读(442) 评论(0) 推荐(1)
摘要:堆排序是采用树的形式的数据结构来进行排序的,其中每一个堆都是完全二叉树。堆排序分为大根堆与小根堆,大根堆(小根堆)表示在完全二叉树中,所用的非叶子节点都大于等于(小于等于)他们左右子节点(存在)。所以堆的顶点不是最大数就是最小数。这样的话我们就可以借助这种性质,每次都取出大根堆(小根堆)的顶点数,形 阅读全文
posted @ 2016-10-29 22:09 Evil_XJZ 阅读(261) 评论(0) 推荐(0)
摘要:二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序 阅读全文
posted @ 2016-10-29 21:24 Evil_XJZ 阅读(226) 评论(0) 推荐(0)
摘要:public class Solution { public int NumberOf1(int n) { int count = 0; while(n!= 0){ count++; n = n & (n - 1); } return count; } } 这段小小的代码,很是巧妙。 如果一个整数不 阅读全文
posted @ 2016-09-13 20:40 Evil_XJZ 阅读(244) 评论(0) 推荐(0)
摘要:利用动态规划,一共有n列,若从左向右放小矩形,有两种放置方式: 第一种:横着放,即占用两列。此时第二行的前两个空格只能横着放,所有,总的放置次数变为1+num(2*(n-2)),其中2*(n-2)代表两行n-2列的矩阵 第二种:竖着放,此时有1+num(2*(n-1)),因此 利用动态规划求解public class Solution { public int RectCover... 阅读全文
posted @ 2016-09-13 20:03 Evil_XJZ 阅读(493) 评论(0) 推荐(0)
摘要:判断链表是否有环,目前有两种主流的方法,一种是设置两个指针,一个步进量是1,另一个步进量是2,如果存在环,则步进量为2的指针一定能追赶上步进为1的指针,即在某一时刻它们的地址相同,代码如下: 另一种方法是遍历链表,没遍历一个节点,就给这个节点计数,如果某节点入度超过1,则说明链表有环。但是如果链表结 阅读全文
posted @ 2016-09-12 10:25 Evil_XJZ 阅读(197) 评论(0) 推荐(0)
摘要:字符串匹配的KMP算法 作者: 阮一峰 日期: 2013年5月 1日 作者: 阮一峰 日期: 2013年5月 1日 字符串匹配是计算机的基本任务之一。 举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这 阅读全文
posted @ 2016-09-12 09:44 Evil_XJZ 阅读(142) 评论(0) 推荐(0)
摘要:上一篇文章,我介绍了KMP算法。 但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。 Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Stro 阅读全文
posted @ 2016-09-12 09:39 Evil_XJZ 阅读(177) 评论(0) 推荐(0)