随笔分类 - 典型面试编程题
摘要:Abstract 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制,也就是说只有当使用到这个实例的时候才会创建这个实例,这个好处在单例模式中得到了广泛应用。这个机制在single-threaded环境下的实现非常简单,然而在multi-threaded环境下却存在隐患。本文重点介绍惰性加载机制以及其在多线程环境下的使用方法。(作者numberzero,参考IBM文章《Double-checked locking and the Singleton pattern》,欢迎转载与讨论)1 单例模式的惰性加载通常当我们设计一个单例类的时候,会在类的内部构造这个类(通过
阅读全文
摘要:0001010>n表示m右移n位,正数右移之后再最左边补n个0;如果数字原先是负数,则右移之后在最左边补n个1;、 1 int NumberOf1(int n) 2 { 3 int count=0; 4 while(n) 5 { 6 if(n&1) 7 count++; 8 n=n>>1; 9 }10 return count;11 }整数右移一位和把整数除以2在数学上是等价的,但是上面的代码不能换成除以2,因为除法的效率比移位运算要低很多,在实际编程中尽可能的使用位移运算代替乘除法运算同时上面的代码如果n是负数的话,就可能造成死循环 1 int Number...
阅读全文
摘要:1 /*length 为字符串数组string的总容量*/ 2 void ReplaceBlank(char stringp[],int length) 3 { 4 if(string==NULL &&lengthlength)23 return;24 25 int indexOfOriginal = originalLength;26 int indexOfNe = newLength;27 while(indexOfOriginal >=0 && indexOfNew >indexOfOriginal)28 {29 if(string[index
阅读全文
摘要:1 bool Find(int *matrix,int rows,int clumns,int number) 2 { 3 bool found=false; 4 if(matrix!=NULL&&rows>&& columns>0) 5 { 6 int row=0; 7 int column=columns-1; 8 while(row=0) 9 {10 if(matrix[row*columns+column]==number)11 {12 found=true;13 break;14 ...
阅读全文
摘要:和二叉树中两个结点的公共祖先相关的有两个问题,一个是求最低的公共祖先,第二个是求所有公共祖先。首先看第一个,仔细观察不难发现,二叉树中两个结点的最低公共祖先满足一个性质,就是给定两个结点分别处于以最低公共祖先两个孩子为根节点的子树中。我们可以采用DFS来搜索两个给定结点,对于每个结点通过比较搜索其两子树的返回值和来确定,因为是先搜索两子树后判定,所以遇到的第一个符合条件的结点一定是最低公共祖先。代码如下: 1 PtrNode lowest_common_ancestor(PtrNode root, int a, int b) 2 { 3 PtrNode res, res_l...
阅读全文
摘要:enum Status{KValid=0,KInvalid};int g_nStatus=KValid;int StrToInt(const char *str){ g_nStatus=KInvalid; long num=0; if(str!=NULL||*str!='\0') { bool minus=false; if(*str=='+') str++; else if(*str=='-') { str++; minus=true } if(*str!='0') { ...
阅读全文
摘要:void RemoveNode(ListNode** pHead,int value){ if(pHead==NULL||*pHead==NULL) return; ListNode*pToBeDeleted=NULL; if((*pHead)->m_nValue==value) { pToBeDeleted=*pHead; *pHead=(*pHead)->m_pNext; } else { ListNode*pNode=*pHead; while(pNode->m_pNext!=NULL&&pNode-...
阅读全文
浙公网安备 33010602011771号