E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
剑指Offer算法
剑指offer算法
java实现 单例模式
转载 http://www.cnblogs.com/coffee/archive/2011/12/05/inside-java-singleton.html关于单例模式的文章,其实网上早就已经泛滥了。但一个小小的单例,里面却是有着许多的变化。网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便萌生了写这篇文章的念头。企图把这个单例说透,说深入。但愿我不会做的太差。
believejava
·
2014-08-14 17:00
java
单例
线程安全
懒汉
剑指offer
剑指offer算法
java实现 单例模式
转载http://www.cnblogs.com/coffee/archive/2011/12/05/inside-java-singleton.html关于单例模式的文章,其实网上早就已经泛滥了。但一个小小的单例,里面却是有着许多的变化。网上的文章大多也是提到了其中的一个或几个点,很少有比较全面且脉络清晰的文章,于是,我便萌生了写这篇文章的念头。企图把这个单例说透,说深入。但愿我不会做的太差。首
黄玮鹏
·
2014-08-14 17:00
剑指offer
剑指Offer算法
实现之二十六:复杂链表的复制
题目:请实现一个函数ComplexListNode*Clone(ComplexListNode*pHead),复制一个复杂链表。在复杂链表中,每一个节点除了有一个m_pNext指针指向下一个节点外,还有一个m_pSibling指向链表中的任意接待你或者NULL。节点的C++定义如下:structComplexListNode{ intm_nValue; ComplexListNode*m_pNex
gaoshanluishui
·
2013-08-04 21:00
剑指Offer算法
实现之二十五:二叉树中和为某一值的路径
题目:输入二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从数的根节点开始往下一直到叶节点所经过的节点形成一条路径。二叉树的接待你定义如下:structBinaryTreeNode{ intm_nValue; BinaryTreeNode*m_pLeft; BinaryTreeNode*m_pRight; };思路:递归,函数参数中维护”路径“,回溯。编译环境:ArchLinux+
gaoshanluishui
·
2013-08-04 21:00
剑指Offer算法
实现之二十四:二叉搜索树的后续遍历序列
题目:输入一个整数数组,判断该数组是不是某个二叉搜索数的后续遍历的结果。如果是则返回true,否则返回false。假如输入的数组的任意两个数组都互不相同思路:后续遍历,最后一个元素为root。BST的特点是左子树所有节点小于等于root,右子树所有子节点均大于等于root。递归,找到可能是左子树的序列,余下的为右子树的序列。判定候选的右子树序列是否满足大于等于root的条件。若满足,递归左右子树判
gaoshanluishui
·
2013-08-04 21:00
剑指Offer算法
实现之二十三:从上往下打印二叉树
题目:从上往下打印二叉树的每个节点,同一层的节点按照从左到右的顺序打印。二叉树节点定义如下:structBinaryTreeNode{ intm_nValue; BinaryTreeNode*m_pLeft; BinaryTreeNode*m_pRight; };思路:基本的广度优先遍历算法BFS,使用队列。对于每个待遍历的元素,先入队。对于队列的每个元素,出队访问之,并把其左右节点依次入队。编译
gaoshanluishui
·
2013-08-04 21:00
剑指Offer算法
实现之二十二:栈的压入、弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1、2、3、4、5是某栈的压栈序列,序列4、5、3、2、1就是该栈对应的一个弹出序列,但4、3、5、1、2就不可能是该压栈序列的弹出序列。思路:使用辅助站,根据模拟弹出序列和压入序列编译环境:ArchLinux+Clang3.3,C++11实现一:#include #in
gaoshanluishui
·
2013-08-04 21:00
剑指Offer算法
实现之二十一:包含min函数的栈
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push和pop的时间复杂度都是O(1)。思路:min值是变化的,并且当前min弹出后新的min是是什么?直接的想法:用一个min栈专门跟踪每个push操作后对应的最小值。因此min栈与数据栈占用空间相同能否优化空间?仅当push元素x #include #include #include usin
gaoshanluishui
·
2013-08-04 21:00
stack
min
剑指Offer算法
实现之二十:顺时打印矩阵
题目:输入一个矩阵,按照从外向里以顺时针顺序依次打印出每一个数字。例如:如果输入如下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印:1、2、3、4、8、12、16、15、14、13、9、5、6、7、11、10思路:① 递归打印,每次打印一圈②递归终止条件:设待打印圈的左上角坐标为(x,x),为:2*x>=columns||2*x>=rows
gaoshanluishui
·
2013-08-04 20:00
剑指Offer算法
实现之十九:二叉树的镜像
题目:请完成一个函数,输入一个二叉树,该函数输出它的镜像。二叉树节点定义如下:structBinaryTreeNode{ intm_nValue; BinaryTreeNode*m_pLeft; BinaryTreeNode*m_pRight; };思路:遍历二叉树,交换每个节点的左右子树编译环境:ArchLinux+Clang3.3,C++11实现一:#include #include usin
gaoshanluishui
·
2013-08-04 20:00
剑指Offer算法
实现之十八:树的子结构
题目:输入两颗二叉树A和B,判断B是不是A的子结构。二叉树节点定义如下:structBinaryTreeNode{ intm_nValue; BinaryTreeNode*m_pLeft; BinaryTreeNode*m_pRight; };思路:①二叉树的每个节点往下均是一个二叉树。使用两个函数,一个函数递归遍历二叉树节点,对于每一个节点,调用另一个判定函数判定是否匹配②注意,下图也是子结构:
gaoshanluishui
·
2013-08-04 20:00
剑指Offer算法
实现之十七:合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是按照顺序递增排序的。链表的节点定义如下:structListNode{ intm_nValue; ListNode*m_pNext; };思路:①递归:对于链表PHead1、pHead2。取其小者作当前节点,剩余部分作两个链表递归构造新链表的剩余部分。②迭代:同时遍历两个链表,取小者做当前节点。若一个链表遍历结束,将另一个链表挂载
gaoshanluishui
·
2013-08-04 20:00
剑指Offer算法
实现之十六:翻转链表
题目;定义一个函数,输入一个链表的头结点,翻转该链表并输出翻转后链表的头结点。链表结点定义如下:structListNode{ intm_nKey; ListNode*m_pNext; }; 思路:链表的基本操作。遍历链表的每个节点,同时维护指向新链表head的指针即可编译环境:ArchLinux+Clang3.3,C++11实现一:#include usingnamespacestd; str
gaoshanluishui
·
2013-08-04 20:00
剑指Offer算法
实现之十五:链表中倒数第k个结点
题目:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第一个节点。例如一个链表有6个节点,从头开始他们的值依次是1、2、3、4、5、6。这个链表的倒数第三个节点是值为4的节点。链表的数据结构如下:structListNode{ intm_nValue; ListNode*m_pNext; };思路:双指针“追赶”法,注意链表节点数小于输入参数
gaoshanluishui
·
2013-08-04 08:00
剑指Offer算法
实现之十四:调整数组顺序使奇数在偶数前面
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。思路:类似于快速排序的分区函数。可在线性时间内完成编译环境:ArchLinux+Clang3.3,C++11实现一:双指针两端扫描交换法#include usingnamespacestd; voidreorder_oddeven(int*a,unsignedlen) { i
gaoshanluishui
·
2013-08-03 20:00
剑指Offer算法
实现之十三:在O(1)时间删除链表节点
题目:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间删除该节点。链表节点与函数定义如下:structListNode{ intm_nValue; ListNode*m_pNext; }; voidDeleteNode(ListNode**pListHead,ListNode*pToBeDeleted);思路:①单向链表,若按照常规思路,即使待删除节点的前继(若有)指向待删除节点的后
gaoshanluishui
·
2013-08-03 20:00
剑指Offer算法
实现之十二:打印1到最大的n位数
题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印1、2、3一直到最大的3位数字即999.思路:①考虑大数字,采用数组模拟自增运算②也可考虑使用基于数组的全排列,使用递归实现编译环境:ArchLinux+Clang3.3,C++实现一:数组自增模拟#include #include usingnamespacestd; voidprint1ToMaxNDgts(intn)
gaoshanluishui
·
2013-08-02 22:00
数组模拟自增
剑指Offer算法
实现之十一:数值的整数次方
题目:实现函数doublePower(doublebase,intexponent),求base的exponent次方。不得使用库函数,同时不需考虑大数问题。思路:①double判零技巧②输入参数合法性③避免重复计算,迭代公式:编译环境:ArchLinux+Clang3.3,C++11实现一:迭代公式+位运算#include #include #include usingnamespacestd;
gaoshanluishui
·
2013-08-02 22:00
Power简单实现
剑指Offer算法
实现之十:二进制中1的个数
题目:请实现一个函数,输入一个整数,输出该数二进制表示法中1的个数。例如把9表示成二进制1001,有2位是1。因此如果输入9,该函数输出2.思路:①是否处理负数?是。若是负数,符号位算计数吗?计数②最小负数与最大整数不对称性。若输入是INT_MIN,如何解决?绝大多数计算机均使用二进制补码表示负数③在C/C++中,有符号数的有移位结果是未定义的。可能是算数右移、也可能是逻辑右移。尽管绝大部分编译器
gaoshanluishui
·
2013-08-02 21:00
二进制
1的个数
剑指Offer算法
实现之九:斐波那契数列
题目:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:思路:①可用直接将上述公式翻译成递归函数版本。但算法复杂度是指数级的,且不能写成尾递归的形式②可用循环迭代解决编译环境:ArchLinux+Clang3.3,C++11实现一:迭代版本。时间复杂度O(n)#include #include usingnamespacestd; longlongFib(unsignedn)
gaoshanluishui
·
2013-08-02 21:00
fibonacci
斐波那契数列
剑指Offer算法
实现之八:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1.思路:①题目并为说数组元素无重复②“有序”数组的查找,考虑使用二分查找。找到“中位”元素,不满足条件,则“二分”缩小收缩范围③二分查找的“变体”,注意特例编译环境:ArchLinux+
gaoshanluishui
·
2013-08-02 21:00
二分查找
数组旋转
剑指Offer算法
实现之七:用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队尾插入节点和在队首删除节点的功能。template classCQueue{ public: CQueue(); ~CQueue(); voidappendTail(constT&node); TdeleteHead(); private: stackstack1; stackst
gaoshanluishui
·
2013-08-02 21:00
栈
队列
剑指Offer算法
实现之六:重建二叉树
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数组。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},重建出图所示的二叉树并输出它的头结点。二叉树节点的定义如下:structBinaryTreeNode{ intm_nValue; BinaryTreeNode*m_pLeft;
gaoshanluishui
·
2013-08-02 20:00
二叉树
中序遍历
先序遍历
剑指Offer算法
实现之五:从尾到头打印链表
题目:输入一个链表的头结点,从尾到头反过来打印每个节点的值。链表定义如下:structListNode{ intm_nKey; ListNode*m_pNext; };思路:无论是否可以修改源链表的结构,从逻辑上将,是完整“遍历”在先,打印输出在后。先进后出,这是stack机制与函数调用机制,因此有两种实现办法编译环境:ArchLinux+Clang3.3,C++11实现一:递归版本#includ
gaoshanluishui
·
2013-08-02 11:00
剑指Offer算法
实现之四:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成"%20"。例如输入“WeareHappy”,则输出“We%20are%20Happy”。思路:一个空格的替换需要两个额外的字符空间。这是一种需要扩展空间的“替换”。①若不可修改源字符串,即“复制式”的替换,则可先申请足够的额外空间,再从前往后拷贝源字符串,拷贝过程中作替换。②若可修改源字符串,并确保源字符串尾部后有足够的空间以供替换产生的空间扩展,
gaoshanluishui
·
2013-08-02 11:00
剑指Offer算法
实现之三:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否有该整数。 例如,下面的二维数组。如果在其中查找7则返回true,查找5则返回false: 1 2 8 9 2 4 912 4 71013 6 81115思路: 利用“二分”的思想,即在某种程度上能够找到一个数,不在大的那一块,就在小的
gaoshanluishui
·
2013-08-02 08:00
剑指Offer算法
实现之二:实现Singleton模式
题目:实现Singleton模式说明:以下考虑主要基于Java思路: 单例模式的基本考虑: 1.使用static字段 2.使用private构造器 3.是否需要延迟初始化。若使用延迟初始化,线程安全地初始化如何保证 4.权衡:若初始化不是很耗费资源,尽量不要使用延迟初始化。因为JVM对class进行延迟加载。 额外可能需要考虑的: 1.即使仅提供private构造器,
gaoshanluishui
·
2013-08-01 19:00
剑指Offer算法
实现之一:赋值运算符函数
题目:如下为类型CMyString的声明,请为该类型添加运算符函数classCMyString{ public: CMyString(char*pData=NULL); CMyString(constCMyString&str); ~CMyString(); private: char*m_pData; };思路:考虑下列问题: 1.返回自身的引用 2.处理“自我赋值” 3.异常安全性编译环境:A
gaoshanluishui
·
2013-08-01 10:00
算法面试C++
上一页
1
2
3
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他