自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 资源 (5)
  • 收藏
  • 关注

原创 面试题23:从上往下打印二叉树(层序遍历) && 面试题25:二叉树中和为某一值的路径

/************************************************************************* > File Name: inorder-tree.cpp > Author: liudong > Mail: [email protected] > Created Time: Thu 28 Apr 2016 12:

2016-04-28 15:35:17 423

原创 面试题18:树的子结构

/************************************************************************* > File Name: subtree.cpp > Author: liudong > Mail: [email protected] > Created Time: Fri 22 Apr 2016 10:40:35

2016-04-25 10:26:42 293

原创 面试题06:在二元树中找出和为某一值的所有路径(未完待续)

题目:输入一个整数和一棵二元树。从树的根结点开始往下访问一直到叶结点所经过的所有结点形成一条路径。打印出和与输入整数相等的所有路径。 例如输入整数22和如下二元树 10 / \ 5 12 / \ 4 7 则打印出两条路径: 10,12和10,5, 7。 二元树结点的数据结构定义为:struct BinaryTreeNode

2016-04-18 23:31:02 295

原创 面试题05:求子数组的最大和

题目:输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。 例如输入的数组为1,-2,3,10,-4,7,2,-5,和最大的子数组为3,10,-4,7,2,因此输出为该子数组的和18。//求子数组的最大和int MaxSubArray(int a[],int n){ if(a==NUL

2016-04-18 22:52:52 293

原创 内存泄漏

内存泄漏,系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败。内存泄漏是最难发现的常见错误之一,因为除非用完内存或调用malloc失败,否则都不会导致任何问题。实际上,使用C/C++这类没有垃圾回收机制的语言时,你很多时间都花在处理如何正确释放内存上。1、内存泄漏在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程

2016-04-18 13:11:04 401

原创 面试题04:找出两个单向链表的第一个公共节点

问题描述:给定两个单向链表,找出它们的第一个公共节点。链表的节点定义如下:struct ListNode{ int Key; ListNode* pNext;};ListNode* FindFirstCommonNode(ListNode* list1,ListNode* list2){ ListNode* pCommon=NULL; i

2016-04-17 21:22:48 663

原创 面试题02:数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。 分析: 1,如果无序,是不是可以先把数组中所有这些数字进行排序,最常用的快速排序O(N*logN)即可。然后把那个出现次数超过一半的数字直接输出,题目便解答完成了。总的时间复杂度为O(N*logN)。 一个数字在数组中的出现次数超过了一半,那么在已排好序的数组索引的N/2处(从零开始编号),就一定是这个数字。自此,我们只需要对

2016-04-17 20:25:41 338

原创 面试题01:二元查找树转变成排序的双向链

目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何 新的结点,只调整指针的指向。 比如将二元查找树10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16#include <iostream>using namespace std;struct Node{ int value

2016-04-16 23:49:46 418

原创 确定主机字节序的程序

小端(little-endian)字节序:将低序字节存储在起始地址。 大端(big-endian)字节序:将高序字节存储在起始地址。 主机字节序:某个给定系统所用的字节序。short 数据,占2个字节,给它赋值0x0102。 若采用的大端法,则其低地址端应该存放的是0x02; 若采用的小端法,则其低地址端应该存放的是0x01; 通过联合体来获得其高低地址的数据。参考《Unix网络编程.卷1

2016-04-15 17:33:39 552 1

原创 面试题03:反转链表

题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:struct List{ int value; ListNode* next;};1、循环方法//反转链表List* ReverseList(List* pHead){ List* pNode = pHead; List* pPre = NULL; L

2016-04-15 14:04:44 212

原创 串的模式匹配算法

1、Brute-Force模式匹配算法(暴力匹配) 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有: 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字符; 如果失配(即S[i]! = P[j]),令i = i - (j - 1),j = 0。相当于每次匹配失败时,i 回溯,j 被置为0。int In

2016-04-14 22:54:46 2229

原创 希尔排序

基本思想: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。//希尔排序(属于插入排序),也叫缩小增量排序void ShellSort(int A[],int n){ int i,j,gap; for(gap=n/2;gap>0;gap/=2){ for(i=gap;i<n;i++

2016-04-13 11:26:28 231

原创 删除链表中等于给定值val的所有节点

(1)删除链表中等于给定值val的所有节点 给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。 (2)删除链表中重复的结点 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5 (3)从尾到头打印链

2016-04-06 22:02:28 2034

原创 冒泡排序

冒泡排序是非常容易理解和实现,,以从小到大排序举例: 设数组长度为N。 1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。 3.N=N-1,如果N不为0就重复前面二步,否则排序完成。//冒泡排序void Swap(int& a, int& b){ int t

2016-04-06 19:16:43 226

原创 插入排序

插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。//插入排序,从小到大void InsertSort(int a[], int n){ for (int i = 1; i < n; i++){ int temp = a[i]; for (int j

2016-04-06 17:33:14 208

原创 快速排序

快速排序算法的基本特性: 时间复杂度:O(n*lgn) 最坏:O(n^2) 空间复杂度:O(n*lgn) 不稳定。快速排序是一种排序算法,对包含n个数的输入数组,平均时间为O(nlgn),最坏情况是O(n^2)。 通常是用于排序的最佳选择。因为,基于比较的排序,最快也只能达到O(nlgn)。//快速排序void QuickSort(int a[], int left, int right

2016-04-06 17:29:56 194

原创 二进制中1的个数

//整数n的二进制表示中1的个数int NumberOf1(int n){ int cnt = 0; while (n != 0){ cnt++; n = n&(n - 1); } return cnt;}测试int n = -1;cout << n << " has 1 is " << NumberOf1(n) << endl;

2016-04-06 11:45:46 183

原创 字符串的排列、组合

迭代方法1、全排列#include <iostream>using namespace std;void Swap(char* c1, char* c2){ char temp = *c1; *c1 = *c2; *c2 = temp;}void Permutation(char* str, char* begin){ if (*begin == '\0'){

2016-04-06 11:02:57 335

原创 最小的K个数

题目:输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。1、最简单的思路:对输入的n个整数排序,输出位于前面的K个数。 时间复杂度为O(nlogn)2、O(n)的算法,会修改输入的数组

2016-04-05 22:06:11 265

原创 蛇形矩阵(百度2016实习招聘)

#include "stdafx.h"#include <iostream>#include <vector>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ int m,n; cin >>m >> n; vector<vector<int> > vec(m, vector<int>(n)); in

2016-04-04 11:52:39 226

原创 动态数组

1、一维数组 int *p1 = new int[10]; //一维数组 //todo delete[] p1;2、二维数组m*n int m = 10; int n = 5; int **p2 = new int*[m]; for (int i = 0; i < m; i++){ p2[i] = new int[n]; }

2016-04-04 11:00:10 389

原创 最大公约数

1、辗转相除法 也叫欧几里德算法。//迭代法int GCD1(int a,int b) //GreatestCommonDivisor{ /*if(b==0) { return a; } else { int tem=a%b; return GCD(b,tmp); }*/ return b

2016-04-03 11:17:11 323

原创 数制转换(十进制、二进制、八进制、十六进制)

十进制整数N向其它进制数d(二、 八、 十六)的转换是计算机实现计算的基本问题。 转换法则: n=(n div d)*d+n mod d 其中: div为整除运算,mod为求余运算 例如 (1348)10= (2504)8, 其运算过程如下: n n div 8 n mod 8 1348

2016-04-02 10:35:07 1863

原创 广义表(待补充)

广义表

2016-04-01 22:21:08 282

Visual_Assist_X

该助手适用于VS2013和VS2012等最新vs编译器,方便使用,破解版。

2016-01-15

Head First Design Patterns

《Head First设计模式》(中文版)共有14章,每章都介绍了几个设计模式,完整地涵盖了四人组版本全部23个设计模式。前言先介绍这本书的用法;第1章到第11章陆续介绍的设计模式为Strategy、Observer、Decorator、Abstract Factory、Factory Method、Singleton,Command、Adapter、Facade、TemplateMethod、Iterator、Composite、State、Proxy。最后三章比较特别。第12章介绍如何将两个以上的设计模式结合起来成为新的设计模式(例如著名的MVC模式),作者称其为复合设计模式(这是作者自创的名称,并非四人组的标准名词),第13章介绍如何进一步学习设计模式,如何发觉新的设计模式等主题,至于第14章则很快地浏览尚未介绍的设计模式,包括Bridge、Builder、Chain of Responsibility、Flyweight、Interpreter、Mediator、Memento、Prototype,Visitor。第1章还介绍了四个○○基本概念(抽象、封装、继承、多态),而第1章到第9章也陆续介绍了九个○○原则(Principle)。千万不要轻视这些○○原则,因为每个设计模式背后都包含了几个○○原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到○○原则,以方便判断取舍。可以这么说:○○原则是我们的目标,而设计模式是我们的做法。

2015-11-13

深度探索C++对象模型

这本书探索“对象导向程序所支持的C++对象模型”下的程序行为。对于“对象导向性质之基础实现技术”以及“各种性质背后的隐含利益交换”提供一个清楚的认识。检验由程序变形所带来的效率冲击。提供丰富的程序范例、图片,以及对象导向观念和底层对象模型之间的效率测量。

2015-11-13

STL源码剖析

这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;甚至还能够看到底层的memory pool和高阶抽象的traits机制的实现。

2015-09-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除