剑指offer编程
文章平均质量分 75
onlyloveonce
我是学生。其实我还是程序猿
展开
-
题目5:替换空格
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”则输出“We%20are%20happy.” o(n)的时间复杂度内替换空格,过程如下图过程,(a),(b),(c),(d),(e)自己实现如下: void rep(char* p){ int k = 0; char *q = p; if(p!=NULL) { for(;...原创 2018-03-06 23:17:22 · 123 阅读 · 0 评论 -
题目10:斐波那契数列
题目一:求斐波那契数列的第n项。 写一个函数,输入n,求斐波那契(FIbonacci)数列的第n项。斐波那契数列定义如下:递归与on代码如下:#include<stdio.h> int fibonacci(int n){ if(n==0){ return 0; } if(n==1){ return 1; } return fibonacci(n-1)...原创 2018-03-24 22:48:51 · 884 阅读 · 0 评论 -
题目9: 用两个栈实现队列
题目:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在队列尾部插入节点和咋队列头部删除节点的功能。Queue.h#include <stack>#include <exception>using namespace std;template <typename T> class CQ...原创 2018-03-20 22:32:29 · 90 阅读 · 0 评论 -
二维数组和指针
二维数组和指针⑴ 用指针表示二维数组元素。要用指针处理二维数组,首先要解决从存储的角度对二维数组的认识问题。我们知道,一个二维数组在计算机中存储时,是按照先行后列的顺序依次存储的,当把每一行看作一个整体,即视为一个大的数组元素时,这个存储的二维数组也就变成了一个一维数组了。而每个大数组元素对应二维数组的一行,我们就称之为行数组元素,显然每个行数组元素都是一个一维数组下面我们讨论指针和二维数组元素的...转载 2018-03-06 10:41:45 · 131 阅读 · 2 评论 -
题目4:二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。刚看到这道题时让我想起了蛇形添数,本题举例为二数组{{1,2,8,9},{2,4,9,12},{4,7,10,13},{6,8,11,15}},在这个数组中查找7,算法思想是从右上角开始9大于7删除9所在列,此时最右上角...原创 2018-03-05 23:16:53 · 125 阅读 · 0 评论 -
题目3:数组中重复的数字
一 找出数组中重复的数字。 在一个长度为n的数组里所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或3。代码如下:void duplicate(int a[],int m){ if(a!=NULL&a...原创 2018-03-04 22:46:58 · 140 阅读 · 0 评论 -
题目8:二叉树的下一个节点
题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右节点的指针,还有一个指向父亲节点的指针。 三种情况,1、该节点有右子树,下一个节点就是右子树的最左字节点。2、该节点没有右子树,且是父亲节点的左孩子节点,则该下一节点是其父亲节点。3、该节点没有右子树,且该节点还是父亲节点的右孩子节点,则该下一节点是沿着指向父亲节点一直向上遍历,...原创 2018-03-17 22:30:02 · 157 阅读 · 0 评论 -
题目2:实现Singleton模式
只能生成一个实例的类是实现了Singleton(单例)模式的类型。由于设计模式在面向对象程序设计中起着剧组轻重的作用,在面试过程中很多公司都喜欢问一些与设计模式相关的问题。在常用模式中, Singleton是唯一一个能够用短短几十行代码完整实现的模式。因此,写一个Singleton的类型是一个很常见的面试题。1 一个简单的单例模式:构造函数声明为private或protect防止被外部函数...原创 2018-03-03 22:22:46 · 201 阅读 · 0 评论 -
题目7:重建二叉树
题目:输入二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建如下图构建的二叉树并输出的它的头结点。代码如下:#include<stdio.h>#include<stdlib.h>typedef s...原创 2018-03-16 17:05:45 · 160 阅读 · 0 评论 -
二级指针
首先理解几个概念:1.对于一个普通变量,进行引用操作,得到的是一级指针。如int a=0;int *p=&a,则&a就是一级指针。因为&a的值就是a的地址,p的值也是a的地址,则&a和p就是一级指针变量(简略为指针),对&a进行解引用操作,int b=*&a;这b等于0.2.对于普通变量作为形参传递到函数内部,参数的值传递就意味着只是简单的将变量的值...转载 2018-03-09 23:21:45 · 241 阅读 · 4 评论 -
题目1:如下为类 CMyString 的声明,请为该类型添加赋值运算符函数。
class CMyString{ public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(void); CMyString& operator = (const CMyString& str); private: char...原创 2018-03-01 10:29:34 · 319 阅读 · 0 评论 -
C++之类对象的返回与引用
一、类对象的返回 在拷贝构造器中提到过:class A{};A func(A a){ return a;}int main(){ A x; func(x);}调用func(a)中参数的传递本质是调用拷贝构造器的发生,将实参x拷贝给形参a中。A func(A &a){ return a;}int main(){ A x; fun...转载 2018-03-01 09:42:18 · 1775 阅读 · 0 评论 -
C++各种构造函数的写法
构造函数 ,是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中 。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。(摘自百度百科 构造函数 )。一、最基本的构造函数1 class Base2 {3 public:4 Base(int var) : m_Var(...转载 2018-02-28 22:53:04 · 397 阅读 · 0 评论 -
在c++语言中,什么是拷贝构造函数呢,它有什么作用呢?
这是清华大学的教程中讲解,参考=============================================================对一个简单变量的初始化方法是用一个常量或变量初始化另一个变量,例如: int m = 80; int n = m; 我们已经会用构造函数初始化对象,那么我们能不能象简单变量的初始化一样,直接用一个对象来初始化另一个对象呢?答案是肯定的。我们以...转载 2018-02-28 21:50:20 · 9835 阅读 · 1 评论 -
题目6:从尾到头打印链表
题目:输入一个链表的头节点,从尾部到头反过来打印出每个节点的值。链表节点定义如下:struct ListNode{ int m_nKey; ListNode* m_pNext;}; 从头到尾打印每个节点的值,我们都知道只要从头到尾遍历一遍就可以。现在我们需要从尾到头打印每个节点的值,我们有两个思路,其一就是从头到遍历,同时将每个节点的值存到栈中。其二...原创 2018-03-07 22:58:54 · 132 阅读 · 0 评论 -
题目11:旋转数组的最小数字
题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 代码如下:#include<stdio.h>#include<string.h> int midOrder(int num[],int ...原创 2018-03-29 15:30:28 · 101 阅读 · 0 评论