自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

tianya_team

欢迎订阅公众号:IT程序员开发

  • 博客(43)
  • 收藏
  • 关注

原创 面试题74:机器人的运动范围

题目:地上有一个m行n列的方格。一个机器人从坐标(0,0)的格子开始移动,它每一次可以向左、右、上、下移动一格,但不能进入行坐标和列坐标的数位(个位、十位等)之和大于K的格子。请问该机器人能够到达多少个格子?思路:参考:面试题73:矩阵中的路径#include #include #include #include #include //堆算法#incl

2016-03-31 18:31:23 339

原创 面试题73:矩阵中的路径

题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。思路:用回溯来做。#include #include #include #include #include //堆算法#include

2016-03-31 17:05:42 400

原创 面试题72:滑动窗口的最大值

题目:给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。思路:方法一:暴力法窗口大小为K,则每次找到一个窗口最大值的时间复杂度为O(K),总时间复杂度:O(NK)方法二:仔细观察,发现窗口滑动其实就是队列先移出一个元素,再添加一个元素,我们可不可以在这个过程中用O(1)的时间来找到队列里最大的那个元素?我们用两个栈实现过O(1)时间找出栈中最小的元素:面试题2

2016-03-31 10:52:23 2597

原创 面试题71:数据流中的中位数

解法一:先存数组,再排序(效率很低)解法二:先存数组,再冒泡排序排一半(效率同样很低)解法三:(推荐)先存数组,利用partition函数原理,如果partition返回的index刚好是数组长度的一半,那么这个index对应的数就是中位数啦。时间复杂度:O(n)#includeusing namespace std;int Partition(int *ar

2016-03-31 10:24:40 369

原创 面试题70:二叉搜索树第K大的结点*

题目:给定一棵二叉搜索树,请找出其中的第K大的结点。思路:按中序遍历的顺序遍历二叉树,可以找到第K大的结点。#include #include #include using namespace std;struct Node{ int val; Node *left; Node *right; Node(int _val) :val(_val),

2016-03-30 21:29:02 272

原创 面试题69:序列化二叉树

题目:请实现两个函数,分别用来序列化和反序列化二叉树。思路:序列化是指将一个二叉树保存到文件中,反序列化是指从文件中读取二叉树结点值重构二叉树。我们采用先序遍历将二叉树的值保存到文件中,为了保证重构二叉树时结点能被插到正确的位置,我们将NULL结点也存下来,用'#'表示。#include #include #include using namespace

2016-03-30 20:44:13 232

原创 面试题68:按之字形顺序打印二叉树

题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。思路:可以用两个队列来实现,当一个队列为空时,换行,所以不需要额外存储层数。#include #include #include using namespace std;struct Node{ in

2016-03-30 19:59:34 255

原创 面试题67:把二叉树打印成多行

题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。思路:其实还是按层遍历,用队列可以实现。关键是如何每一层打印一行。可以重新定义一个结构:struct Com{ Node *node; int level; Com(Node *_node, int _level) :node(_node), level(_level){}};每次往队列取出

2016-03-30 18:45:31 340

原创 面试题66:对称的二叉树

题目:请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和他的镜像一样,那么它是对称的。思路:可以用递归来进行判断。首先判断根结点的左右子结点left,right的值是否相等,是则进行下一步。判断left->left和right->right是否相等,left->right和right->left是否相等,若相等,则表明left和right是对称的,进行下一步。

2016-03-30 17:09:32 341

原创 面试题65:二叉树的下一个结点

题目:给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针外,还有一个指向父结点的指针。思路:如果该结点有右子树,则下一个结点就是右子孩子。如果该结点没有右子树:如果该结点是其父节点的左子结点,则下一个结点就是其父结点。如果该结点是其父结点的右子结点,则向上递归,直到父结点是左子结点,则该父结点的父结点就是下一个结点

2016-03-30 16:36:38 319

原创 面试题64:链表中环的入口结点

题目:一个链表中包含环,如何找出环的入口节点?思路:可以先确定环中的结点数m,然后让一个指针p1先走m步,接着指针p2开始走。则他们相遇的结点就是环的入口地址。so,如何确定环中结点的数目?可以用快慢指针来,p1每次走一步,p2每次走两步,且这样走一次,count加1,当p2赶上p1的时候,count就是环中结点数。#include #include using

2016-03-30 15:44:42 252

原创 面试题63:字符流中第一个不重复的字符

题目:请实现一个函数用来找出字符流中第一个只出现一次的字符。思路:由于是字符流,也就是只能遍历该字符串一次。可以用hash表来做。键值为字符的ascii码,值为该字符在字符流中的位置。有一点处理技巧:hash表初始值为-1,如果出现多次,则将值改为-2。最后扫描hash表,找出只出现一次,且位置最小的那个字符。代码略。

2016-03-30 15:06:33 336

原创 面试题62:表示数值的字符串

题目:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串“+100”、“5e2”、“-123”、“3.1416”及“-1E-16”都表示数值,但"12e"、“1a3.14”、“1.2.3”、“+-5”及“12e+5.4”都不是。思路:表示数值的字符串遵循如下模式:[sign]integral-digits[.[fractional-digits]][e

2016-03-30 14:42:42 286

原创 面试题61:斜率最大的那条线通过的两个点

题目:平面上有N个点,每两个点都确定一条直线,求出斜率最大的那条直线所通过的两个点,斜率不存在的情况不考虑。思路:可以先将N个点按x进行排序。斜率k最大值为max(斜率(point[i],point[i+1])) 0时间复杂度:O(nlgn)

2016-03-28 22:19:41 1890

原创 面试题60:递归生成格雷码

格雷码:任意相邻的代码只有一位二进制位不同。每个二进制数为n位,每个二进制数相比,都只有一位二进制码不相同;比如n=1,{0,1};n=2,{00,01,11,10};n=3,{000,001,011,010,110,111,101,100}思路:以n=3的情况为例000001011010110111101100在实现的时候,我们可以在上

2016-03-25 12:17:34 664

原创 哈夫曼树

路径长度:从树中一个结点到另一个结点之间的分支构成两个结点之间的路径,路径上的分支数目称作路径长度。树的路径长度:树的路径长度就是从树根到每一个结点的路径长度之和。哈夫曼树:带权路径长度WPL最小的二叉树称作哈夫曼树。也称为最优二叉树。二叉树a的WPL=5*1+15*2+40*3+30*4+10*4=315二叉树b的WPL=5*3+15*3+40*2+30*2+

2016-03-24 10:36:48 368 1

原创 面试题59:二叉树序列化

题目:二叉树被记录成文件的过程叫做二叉树的序列化。序列化的方法有很多,这里我们采用括号序列的方法将其序列化,所谓括号序列指的是对于一个节点生成一个括号,括号内是其子树的括号序列,其中左儿子(若存在)的括号在前,右儿子(若存在)的括号在后。对于给定的树,请设计高效的算法,将其序列化。给定一个树的根节点指针root,请返回一个字符串,代表其序列化后的括号序列。思路:

2016-03-22 22:41:03 857

原创 面试题58:检查单链表是否回文

题目:对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断该链表是否回文。边界条件:传入指针为空。思路:先通过两个指针,来找到中间结点指针mid,然后mid指针到链表末端开始回溯,另一个指针head开始和这个指针的值进行比较。#include using namespace std;struct ListNode {

2016-03-22 22:01:46 373

原创 打怪升级

在不断积累中进步,总有一天我会卷土重来!一、CVTE面试经历一面:1.判断一个数为素数。写了一个最简单的。bool IsSuShu(int num){ if (num < 2) return false; for (int i = 2; i < num; i++) { if (num % i == 0) return false; } return true;

2016-03-17 14:25:41 893 4

原创 最长回文子串

str="abcdddddddddcf",则最长回文子串为"cdddddddddc"。方法一:先将字符串反转,得到str2,再寻找str1与str2的最大公共子串。最大公共子串参考: 两个字符串的最大公共子序列和最大公共子串方法二:用动态规划做,DP[i][j]表示str[i...j]形成的最长回文子串的长度。

2016-03-15 12:29:00 315

原创 C++笔试

1.交换字符串void SwapString(char *&x,char *&y){ char *temp=x; x=y; y=temp;}调用方式:SwapString(a,b);或者void SwapString(char **x,char **y){ char *temp=*x; *x=*y; *y=temp;}调用方式:SwapString(&a,&b)

2016-03-14 22:27:35 438

原创 编写继承类的复制构造函数和构造函数

当基类存在私有成员时,应该如何编写继承类的复制构造函数呢?方法是在复制构造函数的初始化成员列表中调用基类的复制构造函数。class Base{private: int i;public: Base(int _i) :i(_i){}};class Derived:public Base{public: Derived() :Base(0), j(0){} Derived(

2016-03-14 21:55:30 2993

原创 构造函数调用另一个构造函数

#include#include #include #include using namespace std;struct CLS{ int m_i; CLS(int i) :m_i(i){ cout << "CLS(int):this =" << this << endl; } CLS() { CLS(0); //生成一个临时对象,对调用该函数的对象本身没影响

2016-03-14 21:42:20 587

原创 将long整型转为二进制和16进制,存于字符串中

1.将Long整型转为二进制#include#include #include #include using namespace std;char *get2String(unsigned long num){ char *buff = new char[33]; long temp; for (int i = 0; i < 32; i++) { temp = nu

2016-03-14 20:33:37 6432

原创 两个字符串的最大公共子序列和最大公共子串

1.最大公共子序列例如:BDCABA和ABCBDAB的最大公共子序列是BCBA。找两个递增下标序列和,使得str1[i1]=str2[j1],str1[i2]=str2[j2],...,str1[ik]=str2[jk]。用动态规划来求解:DP[i][j]来表示str1的前i个元素与str2的前j个元素能够组成的最大子序列的长度。str1=BDCABAstr2=ABCBDA

2016-03-14 19:57:49 599

原创 虚函数里面调用虚函数的输出

class CParent { public: virtual void Intro() { printf( "I'm a Parent, " ); Hobby(); } virtual void Hobby() { printf( "I like football!" ); }}; class CChild :

2016-03-13 10:46:58 698

原创 atexit()函数(使main函数之后可以执行其他函数)

可以用atexit()函数来注册程序正常终止时要调用的函数,并且在main()函数结束时,调用这些函数的顺序与注册他们的顺序相反。原型:int atexit(void(*)(void));一个程序最多可以注册32个处理函数。#include#include #include using namespace std;void fn1(void);void fn2(void);

2016-03-11 23:03:28 496

原创 不使用中间变量交换a,b值

void swap(int &a, int &b){ a += b; b = a - b; a = a - b;}void swap1(int &a, int &b){ a ^= b; b ^= a; a ^= b;}

2016-03-11 22:54:26 325

原创 ::操作全局变量

#include#include #include using namespace std;int value = 0;void printvalue(){ cout << value << endl;}int main() { int value = 0; value = 1; cout << value << endl; ::value = 2; printv

2016-03-11 22:45:41 273

原创 大数相乘

编写任意位数的大数相乘的程序。经典的方法是:1)将字符串转为数字并反转(string到vector)2)逐位相乘,结果放到resultNum中(vecotr resultNum(a.size()+b.size(),0))3)清除resultNum中多余的0,处理进位4)将计算结果转为字符串并反转#include#include #include using n

2016-03-11 15:33:36 330

原创 虚继承基类构造顺序

#includeusing namespace std;class A{public: A(char *s) { cout << s << endl; } ~A(){}};class B :virtual public A{public: B(char *s1, char*s2) :A(s1){ cout << s2 << endl; }};class C :

2016-03-11 10:55:30 746

原创 二叉树的非递归前序、中序、后序、层次遍历

1.前序非递归/*非递归前序遍历*/void PreOrderNonRecurive(TreeNode *root){ if (!root) return; stack s; s.push(root); while (!s.empty()) { TreeNode *temp = s.top(); cout data << ""; s.pop(); if (temp

2016-03-10 12:22:24 556

原创 trie数和后缀树

1.trie树字典树(trie)可以保存一些字符串->值的对应关系,字典树的插入和查询时间复杂度都是O(k),其中k是key的长度,与字典树中保存元素数无关。其缺点是空间消耗高。其核心思想是以空间换时间。利用字符串的公共前缀来降低查询时间开销已达到提高效率的目的。trie树的结点信息结构体:struct TrieNode{ int count; //统计该结点的单词出现的

2016-03-09 22:01:40 350

原创 C/C++面试题

1.malloc和new有什么区别?1)malloc是C/C++的库函数,new是C++的运算符,两者都能够用来申请动态内存。2)new不仅会分配内存,还会调用构造函数,而malloc只分配内存,不进行成员初始化的工作。3)new出来的指针是带类型信息的,而malloc返回的是void指针。4)内存泄漏对new和malloc都可以检测出来,但是new可以指明文件哪一行,malloc

2016-03-09 20:54:58 602

原创 操作系统面试题

1.静态链接库和动态链接库静态链接库:参与编译,把(lib)文件中用到的函数代码直接链接到可执行程序中,在可执行文件生成以后,静态链接库.lib文件可以不用。动态链接库:把调用的函数所在模块(DLL)和调用函数在文件中的位置等信息链接进可执行文件。程序在运行时再从DLL中查找相关函数代码,因此需要DLL文件支持。注意:静态链接库不能再包含其他动态或静态链接库,但是动态链接库可以包含其他

2016-03-04 20:28:25 685 1

原创 数据结构面试题

1.单链表的排序1)冒泡排序:typedef struct Node{ int val; node *next; Node(){ val = 0; next = NULL; }}node;void swap(int &a, int &b){ int temp = a; a = b; b = temp;}int Length(node *head){ int si

2016-03-04 15:59:20 520

原创 联合体union

1.union联合是一种特殊的类。一个union可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当给某个成员赋值之后,其他成员就成未定义状态。(共享一个内存,被覆盖了)union不能含有引用类型成员,含有构造函数和析构函数的类类型也可以作为union成员。可以指定public、protected和private,默认是public。不能继承和被继承。先来看看unio

2016-03-04 11:01:50 412

原创 RTTI

RTTI是运行阶段类型识别的简称。可以让基类指针指向任何一个继承类的对象,但是如何知道指针指向的是哪种对象呢?C++有3个支持RTTI的元素:1)如果可能的话,dynamic_cast运算符将使用一个指向基类的指针来生成一个指向派生类的指针;否则,该运算符返回空指针。2)typeid运算符返回一个指出对象类型的值。3)type_info结构存储了有关特定类型的信息。注意:只

2016-03-04 09:01:56 362

原创 String类的实现

#include using namespace std;/*String类的实现*//*功能函数*//*1.重载<<运算符2.重载>>运算符3.默认构造函数4.复制构造函数5.赋值构造函数6.operator+7.operator+=8.operator==9.operator[](const和非const)10.析构函数*/class String{ fr

2016-03-03 16:12:10 284

原创 指针数组与数组指针

int *a[10]:指针数组,a是数组,数组a里存放了10个int*型指针。int  (*a)[10]:a是指针,指向一个数组,此数组有10个int型元素。int (**a)[10]:a是二级指针,指向一个数组,数组有10个int型元素。int*(*a)[10]:a是指针,指向一个数组,数组有10个int*型元素。int(*a[10])():a是数组,数组里面有10个函数指针,指

2016-03-02 19:48:01 314

空空如也

空空如也

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

TA关注的人

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