算法
文章平均质量分 70
likebamboo
这个作者很懒,什么都没留下…
展开
-
每天写一点代码----计数排序。
计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n+k)(其中k是整数的范围),快于任何比较排序算法。 注意与基数排序区分,这是两个不同的排序 计数排序算法不是一个基于比较的排序算法,而且一种稳定的排序算法。 算法思想计数转载 2013-10-13 17:32:56 · 789 阅读 · 0 评论 -
单例模式在多线程并发情况下的一些思考。
最近刚开始看《剑指offer》这本书,其中有讲到单例模式,单例模式可以说是设计模式中最简单的一种了,实现起来也非常简单(曾经的我就是这么想的):/** * 单例模式下考虑多线程并发的情况 * * @author likebamboo */public class Singleton { private static Singleton mInstance = null;原创 2013-11-13 14:11:30 · 1036 阅读 · 0 评论 -
每天写一点代码----双栈实现队列
问题描述:用两个堆栈模拟队列的操作(入队与出队)。思路:我们都知道队列是一种 先进先出(FIFO) 的数据结构, 栈是一种 后进先出(LIFO) 的数据结构,要用两个栈实现一个队列,可以这样设想:假设两个栈 a 和b,最初的时候,a,b都为空栈。假设栈 a 为提供入队列的功能,栈 b 提供出队列的功能。入队列:1,如果栈 b 为空,直接将元素压入栈a 。2,如果原创 2013-10-21 10:44:33 · 1686 阅读 · 0 评论 -
根据先序遍历与中序遍历构建二叉树
题目(剑指offer page55):输入某二叉树的前序遍历和中序遍历结果,请重建二叉树 ,假设前序遍历和中序遍历中不含重复数字。例如:输入前序遍历序列 {1,2,4,7,3,5,6,8 }和中序遍历序列{4,72,1,5,3,6,8}那么构建之后的二叉树为: 思路:在二叉树的先序遍历中,第一个数字总是树的根节点的值。但在中序遍历中,根节点的值在序列中间,左子树的节点的原创 2013-11-20 17:00:58 · 2638 阅读 · 0 评论 -
每天写一点代码----双队列实现栈
问题描述:用两个队列模拟堆栈的操作(入栈与出栈)思路:我们知道队列是FIFO(先进先出),而栈是后进先出(LIFO)要用两个队列实现堆栈我们可以这样做:假设有A.B两个队列,开始都为空。那么:入栈操作:1,当A,B队列均为空时,直接将元素进入A队列。2,当A,B队列有一个不为空时,将元素入队到不为空的那个队列中。出栈操作:1,当A,B 队列均为空时,出栈为N原创 2013-10-21 11:47:44 · 1673 阅读 · 0 评论 -
每天写一点代码----连续子数组乘积最大
问题描述:给定一个n个元素的数组,数组元素全部为整数,负数,正数和0均有可能存在,设设计一个算法,找出连续的几个数组元素相乘积最大。思路:用动态规划很。问题的关键是,序列中有正数也有负数,所以,需要记录最大值,也要记录最小值。Java代码:public class MaxMulArr { public static double maxMul(double[原创 2013-10-22 10:58:07 · 1348 阅读 · 0 评论 -
每天写一点代码----N个连续数的排序算法(庞果网)
题目详情以下是题目详情:给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。例如:原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次原创 2013-10-17 14:11:32 · 1068 阅读 · 0 评论 -
每天写一点代码----倒水问题(庞果网)
问题描述:有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。可以进行的操作是:1,把一个容器灌满; 2,把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸);3,用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。 问是否能够通过有限次操转载 2013-10-20 11:04:26 · 1137 阅读 · 0 评论 -
每天写一点代码----字符串匹配1(KMP算法)
作者: 阮一峰日期: 2013年5月 1日字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Don转载 2013-10-15 14:01:22 · 1041 阅读 · 0 评论 -
每天写一点代码----完美字符串(庞果网)
题目详情 我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定, 但不同字母的完美度不同,而一个字符串的完美度等于它里面所有字母的完美度之和, 且不在乎字母大小写,也就是说字母F和f的完美度是一样的。 现在给定一个字符串,输出它的最大可能的完美度。 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为7原创 2013-10-18 11:33:33 · 999 阅读 · 0 评论 -
每天写一点代码----字符串匹配算法 2 (BM算法)
作者: 阮一峰上一篇文章介绍了KMP算法。但是,它并不是效率最高的算法,实际采用并不多。各种文本编辑器的"查找"功能(Ctrl+F),大多采用Boyer-Moore算法。Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Strother Moore教授发明了这种算法。下面,我根据M转载 2013-10-16 13:40:58 · 1432 阅读 · 0 评论 -
每天写一点代码----最大子段和问题。
1. 问题描述: 有n个数(以下都视为整数),每个数有正有负,现在要在n个数中选取相邻的一段,使其和最大,输出最大的和。(最初看到这个问题是在《编程之美》这本书上)。例如:对于这样一组数 -10, 5 ,2 ,3 ,4 ,-5 ,-23 ,3 ,7 ,-21 . 其最大子段和为 14 (最大字段为 5,2,3,4)。2.问题分析:方法一: 首先想到的是遍历这一组数原创 2013-10-14 14:13:49 · 945 阅读 · 0 评论 -
二维数组查找
题目:(剑指offer, page38)在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,完成一个函数,输入一个这样的二维数组和一个整数,判断该数组中是否有该整数。书中提供一种算法:思路:从数组的右上角元素开始比较,如果该元素等于要查找的元素,OK。如果该元素大于要查找的元素,那么该元素所在的列中的所有元素一定都大于所要搜原创 2013-11-14 15:58:53 · 695 阅读 · 0 评论