自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 问答 (1)
  • 收藏
  • 关注

转载 最长上升子序列nlogn及n^2算法

这题目是经典的DP题目,也可叫作LIS(Longest Increasing Subsequence)最长上升子序列 或者 最长不下降子序列。很基础的题目,有两种算法,复杂度分别为O(n*logn)和O(n^2) 。A.O(n^2)算法分析如下: (a[1]...a[n] 存的都是输入的数) 1、对于a[n]来说,由于它是最后一个数,所以当从a[n]开始查找时,只存在长度为

2016-02-21 12:34:09 1712

转载 TCP的三次握手和四次挥手

一、TCP报文格式        TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图:图1 TCP报文格式        上图中有几个字段需要重点介绍下:        (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。        (2)确认序号:Ack序号,占32位,只有AC

2016-02-29 20:54:38 402

原创 C++:类模板

// 单个类模板基本语法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;//A编程模板 类//模板类 类型参数化template class A{public: A(T a = 0){ this->a = a; }public: void print(){ cout

2016-02-29 16:50:49 363

原创 C++学习笔记:函数模板

// 函数模板基本语法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;template void mySwap(T &a,T &b){ T t = b; b = a; a = t; cout << "hello...我是模板函数,欢迎调用我" << endl;}int _

2016-02-29 15:56:18 288

原创 C++学习笔记:函数指针语法基础以及函数指针做函数参数的思想剖析

// 函数指针语法基础02.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;int add(int a,int b){ cout << "add() do...:"<< a + b << endl; return a + b;}int _tmain(int argc, _TCHAR*

2016-02-28 21:09:13 400

原创 C++学习笔记:c++模型设计和实现 经典案例

信息系统框架集成第三方产品案例——加解密案例背景:一般的企业信息系统都有成熟的框架。软件架构一般不发生变化,能自由的集成第三方厂商的产品。案例要求:请你在企业信息系统框架中集成第三方厂商的Socket通信产品和第三方厂商加密产品。第三方厂商的socket通信产品:完成两点之间的通信;第三方厂商加密产品:完成数据发送时加密;数据解密时解密。案例要求:1)能支持多个厂商的Socke

2016-02-27 22:17:45 1219

原创 C++学习笔记:纯虚函数和抽象类

纯虚函数:纯虚函数时一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本。纯虚函数为各派生类提供一个公共界面(接口的封装和设计、软件的模块功能划分)纯虚函数说明形式:virtual 类型 函数名(参数表)=0;一个具有纯虚函数的基类成为抽象类。

2016-02-27 19:31:10 348

原创 树的中序遍历(非递归实现)

中序遍历的几种情况:分析1:什么时候访问根,什么时候访问左子树,什么访问右子树。当左子树为空或左子树已经访问完毕以后,再访问根。访问完毕根以后,再访问右子树。分析2:为什么是栈,而不是其他(比如说是队列)先走到的后访问,后走到的先访问,显然是栈结构分析3:结点所有路径情况步骤1:如果结点有左子树,该结点入栈;如果结点没有左子树,访问该结点;步骤2:如果结

2016-02-26 22:46:20 651

原创 二叉树拷贝

// 树的高度.cpp : 定义控制台应用程序的入口点。// 树的遍历.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;struct BTNode{ int data; struct BTNode *lchild, *rchild;};typedef struct

2016-02-26 19:56:01 672

原创 求二叉树的深度

// 树的高度.cpp : 定义控制台应用程序的入口点。// 树的遍历.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include using namespace std;struct BTNode{ int data; struct BTNode *lchild, *rchild;};typedef struct

2016-02-26 19:37:50 333

原创 求树的叶子结点的个数

// 树的遍历.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;struct BTNode{ int data; struct BTNode *lchild, *rchild;};typedef struct BTNode BTnode;typedef struct BTNode

2016-02-26 19:25:56 1743

原创 二叉树的常用三种遍历

struct BTNode{ int data; struct BTNode *lchild, *rchild;};typedef struct BTNode BTnode;typedef struct BTNode* BiTree;void preOrder(BTNode *root){ if (root == NULL){ return; } printf("%d",

2016-02-26 18:42:37 424

原创 单链表的创建/测长/打印

// 单链表的建立测长打印.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #pragma warning(disable:4996)using namespace std;typedef struct List{ int val; List *next; List(int x) :val(x), next(NULL){};

2016-02-26 16:40:53 459

原创 带有头节点的单链表的逆置

首先思路必须要清晰,正常思维是倒着来,先找到尾巴结点,这样我们发现都需要记录前驱结点,这样是很繁琐的,因为无法知道前驱结点。所以只能从头往后逆置,而且逆置是一个结点一个结点这样找的,所以我们需要记录当前结点的下一个节点,另外当发生逆置时,是需要知道前面的结点的,因此还需要另外一个结点记录前驱结点。typedef struct SList{ int val; SList *next;

2016-02-26 14:40:41 2592

原创 C语言内存四区

流程:1.点击.exe文件后,操作系统把物理硬盘代码load到内存。2.操作系统把c代码分成4个区3.操作系统找到main函数入口执行各区元素分析:栈区:由编译器自动分配释放,存放函数的参数值,局部变量的值等栈区:一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。全局区(静态区):全局变量和静态变量的存储室放在一起的,初始

2016-02-26 13:18:06 463

原创 文件操作概念

文件读写api        fgetc fputc 按照字符读写文件fputs fgets 按照行读写文件(读写配置文件)fread/fwrite 按照块读写文件(大数据块迁移)1.标准文件的读写1.1文件的打开fopen()文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构去,并将该结构的指针返回给用户程序,以后用户程序就可以用此FILE指针来实现对

2016-02-26 12:33:44 539

原创 char* 和char []的区别

char c[] = "abc"; c[0] = 't'; char *c1 = "def"; c1[0] = 't';//err首先c1是一个指针,它只是指向"def"这个内存块,但是并不知道它的大小,因此不能用对它进行赋值。而c[]定义的是一个数组,因而可以直接用下标对其进行访问。若定义的是 char c2[] = "abc"; char *p = c2; p[0]

2016-02-26 09:24:29 349

转载 关于const做函数返回值的 一个解释

我们看一个例子:char *strA(){ char str[] = "helloworld"; return str;}int _tmain(int argc, _TCHAR* argv[]){ strA(); return 0;}解析:这个str里存的地址是函数strA栈帧里"hello world"的首地址。函数调用完成,栈帧恢复到调用strA之前的状态,临时空间

2016-02-26 09:08:12 711

原创 指针与引用的区别

(1)非空区别:在任何情况下都不能使用指向空值的引用。 一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空置给该变量。相反,如果你变量肯定指向一个对象,假如你的设计不允许变量为空,这时你就可以将变量声明为引用。不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针更高。(2

2016-02-25 21:58:58 479

原创 两个整数型,不准用while、if、for、switch等判断语句 求出两者最大值

题解:可以用bool类型来判断// testfloattoint.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;bool flag(int p,int q){ return p < q;}int maxi(int a,int b){ bool f = flag(a, b);//

2016-02-25 19:11:12 602

原创 有两个变量a和b,不用if等判断语句,求两者较大的值

题解:max=(a+b+abs(a-b))/2

2016-02-25 18:59:37 609

原创 判断一个数是否是2^N次方

要求不能使用 循环。。。题解:首先我们知道2的N次方  这个数 的二进制 肯定是10000....这种形式,而且只带一个1,低位全是0,那么我们就可以用这个数减去1,得到的二进制是011111...再将他俩取逻辑与 得到的结果必定是0,所以用X&(X-1)是否为0 来判断。。

2016-02-25 18:41:16 391

原创 多态相关的面试题

1.如何理解多态。多态的实现效果:同样的调用语句有多种的表现形态;多态实现的三个条件:有继承、有virtual重写、有父类指针(引用)指向子类对象;多态的C++实现:virtual关键字,告诉编译器这个函数要支持多态;不是根据指针类型判断如何调用;而是根据指针所指向的实际对象类型来判断如何调用多态的理论基础:动态联编PK静态联编,根据实际的对象类型来判断重写函数的调用。多态

2016-02-25 13:09:05 905

原创 C++学习笔记:多态的实现原理

C++中多态的实现原理:  当类中声明虚函数时,编译器会在类中生成一个虚函数表虚函数表是一个存储类成员函数指针的数据结构虚函数表是由编译器自动生成和维护的virtual成员函数会被编译器放入虚函数表中存在虚函数时,每个对象中都有一个指向虚函数表的vptr指针// 多态原理探究.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"

2016-02-25 10:56:10 471

转载 堆和栈的区别

堆和栈的区别:  一、堆栈空间分配区别:  1、栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈;  2、堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。  二、堆栈缓存方式区别:  1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放

2016-02-24 22:06:45 305

转载 如何判断单链表是否出现环

如何判断链表中有无环 单向链表中有环的话,如果我们对此链表进行遍历,则将无穷尽。因此有必要判断一个单向链表是否有环。假如一个单向链表中存在环,如下图:(一个小矩形代表链表中的一个节点)虚线箭头代表中间有无数节点。  先说算法,然后再来证明算法的正确性。  以下算法可以判断一个单向链表中是否有环(不讨论详细数据结构,只简要说明。设结点的next域为指向下一结点的指针)

2016-02-24 21:58:03 472

转载 不使用临时变量 交换两个数

假设两个数x和y,则有:方法1,算术运算(加减):x=x+y; //x暂存两数之和y=x-y; //y为两数之和减去y,即原来的xx=x-y; //x为两数之和减去现在的y(原来的x),变成原来的y方法2,逻辑运算(异或):x^=y;//x

2016-02-24 21:45:12 397

原创 求出现次数大于数组长度一半的那个数

方法一:排序,找出最中间的那个数,就是,算法时间复杂度,o(nlogn)方法二:用临时变量,一个存放当前的数,一个用来计数// 求一串数中最多的数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include using namespace std;int findOverhalf(vector& vec){ int

2016-02-24 21:33:52 459

原创 大数相乘

题意:给定两个大数,求相乘结果题解:利用数组来存中间结果以及结果。void mulInteger_2(string &str1, string &str2) //两个整数相乘{ int num1[200] = {0}; int num2[200] = {0}; int result[300] = {0}; //auto_ptr output(new string (str2)

2016-02-24 20:37:57 421

原创 C++学习笔记:重写PK重载

函数重载:必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用函数重写:必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义)多态是在运行期间根据具体对象的类型决定函数调用重写分为2类:1.

2016-02-24 20:27:42 323

原创 C++学习笔记:虚析构函数

我们直接上案例:// 虚析构函数.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing namespace std;#pragma warning(disable:4996)class A{public: A(){ p = new char[20]; strcpy(p,"obja"); printf("A()

2016-02-24 17:41:56 365

原创 C++学习笔记:多态

引言:1.虚继承:如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性。解决方案:虚继承声明,加一个virtual 关键字   。2.面向对象新需求编译器的做法不是我们期望的  如果用父类指针指向子类对象,再调用print()方法,均会调用父类中的print()方法。而我们期望这样做:根据实际的对象类型来判断重名

2016-02-24 15:01:23 265

原创 C++学习笔记:3.4多继承

多继承概念:1.一个类有多个直接基类的继承关系称为多继承2.多继承声明语法class 派生类名:访问控制 基类名1,访问控制 基类名2,...,访问控制 基类名n{}3.类c可以根据访问控制同时继承类A和类B的成员,并添加自己的成员// 多继承.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includeusing name

2016-02-24 11:28:06 353

原创 C++学习笔记:3.3.6 派生类中的static关键字

继承和static关键字在一起会产生什么现象呢?理论知识:1.基类定义的静态成员,将被所有派生类共享2.根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质(遵守派生类的访问控制)3.派生类中访问静态成员,用以下形式显示说明:类名::成员或通过对象访问  对象名.成员案例:// 继承中同名变量和成员函数.cpp : 定义控制台应用程

2016-02-24 10:59:48 632

原创 C++学习笔记:3.3.5 继承中的同名成员变量和函数

1.当子类成员变量与父类成员变量同名时2.子类依然从父类继承同名成员3.在子类中通过作用域分辨符::进行同名成员区分(在派生类中使用基类的同名成员,显示地使用类名限定符)4.同名成员存储在内存中的不同位置注意:基类成员的作用域延伸到所有派生类          派生类的重名成员屏蔽基类的同名成员案例:// 继承中同名变量和成员函数.cpp : 定义控制台

2016-02-24 10:32:19 427

原创 C++学习笔记:3.3.4 继承和组合混搭情况下,构造和析构调用顺序

原则:先构造父类,再构造成员变量,最后构造自己           先析构自己,再析构成员变量,最后析构父亲练习:// 继承和组合混搭情况下的构造和析构调用顺序.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;class Object{public: Object(int a

2016-02-24 10:01:51 397

原创 C++学习笔记:继承中的构造与析构

子类是由父类成员叠加子类新成员得到的。继承中的构造析构函数调用原则1.子类对象在创建时会首先调用父类的构造函数2.父类构造函数执行结束后,执行子类的构造函数3.当父类的构造函数有参数时,需要再子类的初始化列表中显式调用4.析构函数调用的先后吮吸与构造函数相反// 继承中构造和析构.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#inc

2016-02-24 09:32:29 442

原创 C++学习笔记:继承

一、C++中的继承方式会影响子类的对外访问属性public:修饰的成员变量 方法 在类的内部 类的外部都能使用protected:修饰的成员变量方法,在类的内部使用,在继承的子类中可用private:修饰的成员变量方法,只能在类的内部使用二、private成员在子类中依然存在,但是却无法访问到。不论哪种方式继承基类,派生类都不能直接使用基类的私有成员。三、C++中子类对

2016-02-23 21:57:01 357

原创 C++学习笔记:MyString类的重载 练习

首先测试.cpp// MyString类案例.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include"MyString.h"#pragma warning(disable:4996)int _tmain(int argc, _TCHAR* argv[]){ MyString str1("lifeng");//MyString str

2016-02-23 19:19:10 517

原创 152. Maximum Product Subarray

题意:Find the contiguous subarray within an array (containing at least one number) which has the largest product.For example, given the array [2,3,-2,4],the contiguous subarray [2,3] has the large

2016-02-23 16:20:58 306

空空如也

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

TA关注的人

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