剑指offer笔记】的更多相关文章

1.在定义类的赋值描述符成员函数时,有以下几点要注意: 1)判断是否是自己赋值给自己 2)返回值是const类的引用(为了连续赋值) 3)参数是const类的引用 4)如果数据成员中有指针,注意要深拷贝,且要释放之前指针指向的内存. 2.类的拷贝构造函数,一定不能使用该类型的变量做参数,会无法通过编译的.因为如果使用变量,形参和实参之间要拷贝,拷贝又会调用拷贝构造函数,这就陷入死循环,直到内存泄露. 3.…
题目:设计一个类,我们只能生成该类的一个实例. 解法一:单线程解法 //缺点:多线程情况下,每个线程可能创建出不同的的Singleton实例 #include <iostream> using namespace std; class Singleton { public: static Singleton* getInstance() { if(m_pInstance == nullptr) { m_pInstance = new Singleton(); } return m_pInsta…
题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数. class CMyString{ public: CMyString(char* pData = nullptr); CMyString(const CMyString& str); ~CMyString(void); private: char* m_pData; }; 注意点: 是否把返回值的类型声明为该类型的引用,并在函数结束前返回实例自身的引用(*this).只有返回一个引用,才可以允许连续赋值.否则,如果函数的返…
题目一:找出数组中重复的数字.在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字.例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3. 测试用例: 长度为n的数组里包含一个或多个重复的数字. 数组中不包含重复的数字. 无效输入测试用例(输入空指针:长度为n的数组中包含0~n-1之外的数字) 测试代码: void test(cha…
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 测试用例: 二维数组中包含查找的数字(查找的数字是数组中的最大值和最小值:查找的数字介于数组中的最大值和最小值之间). 二维数组中没有查找的数字(查找的数字大于数组中的最大值:查找的数字小于数组中的最小值:查找的数字在数组的最大值和最小值之间但数组中没有这个数字). 特殊输入测试(输入空指针). 测试代码: /* ***数字…
题目:请实现一个函数,把字符串中的每个空格替换成"20%".例如,输入"We are happy."则输出"We%20are%20happy.". 注意:看到这个题目,我们首先应该想到的是原来一个空格字符,替换之后变成'%'.'2'和'0'这3个字符,因此字符串会边长.如果是在原来的字符串上进行替换,就有可能覆盖修改在该字符串后面的内存.如果是创建新的字符串并在新的字符串上进行替换,那么我们可以自己分配足够多的内存.由于有两种不同的解决方案,我们…
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值.链表节点定义如下: struct ListNode{ int m_nKey; ListNode* m_pNext; } 测试用例: 功能测试(输入的链表有多个节点:输入的链表只有一个节点). 特殊输入测试(输入的链表头结点指针为nullptr). 测试代码: void Test(ListNode* pHead) { PrintList(pHead); PrintListReversingly_Iteratively(pHead); p…
题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如,输入前序遍历序列{1, 2, 4, 7, 3, 5, 6, 8}和中序遍历序列{4, 7, 2, 1, 5 3, 8, 6},则重建如下图所示的二叉树并输出它的头结点.二叉树的节点的定义如下: struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; /…
题目:给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左.右子节点的指针,还有一个指向父节点的指针. 测试用例: 普通二叉树(完全二叉树,不完全二叉树). 特殊二叉树(所有节点都没有右子节点的二叉树:所有节点都没有左子节点的二叉树:只有一个节点的二叉树:二叉树的根节点指针为nullptr). 不同位置的节点的下一个节点(下一个节点为当前节点的右子节点.右子树的最左子节点.父节点.跨层的父节点等:当前节点没有下一个节点). 测试代码: void Tes…
题目:用两个栈实现一个队列.队列的声明如下,请实现它的两个函数appendTail和deleteHead,分别完成在尾部插入节点和在队列头部删除节点的功能. 测试用例: 往空的队列里添加.删除元素. 往非空的队列里添加.删除元素. 连续删除元素直至队列为空. 测试代码: void test(char actual, char expected){ if(actual == expected) printf("test passed.\n"); else printf("tes…