03 2020 档案
摘要:面试题17:打印从1到最大的n位数。输入数字n,按顺序打印出从1到最大的n位十进制数。比如输入3,则打印出1、2、3、…、999。 我们很容易想到以下解决思路: #include <iostream> using namespace std; void Print1ToMaxNDigits(int
阅读全文
摘要:面试题52:两个链表的第一个公共节点。输入两个链表,找出它们的第一个公共节点,链表节点定义如下: struct ListNode { int m_nKey; ListNode* m_pNext; }; 蛮力法:在第一个链表上顺序遍历每个节点,每遍历到一个节点,就在第二个链表上顺序遍历每个节点,直到找
阅读全文
摘要:面试题51:数组中的逆序对。在数组中的任意两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。如数组{7,5,6,4}中,一共存在5个逆序对。 直观解法是顺序扫描整个数组,每扫描到一个数字,逐个比较该数字和它后面的数字的大小,如果后面的数
阅读全文
摘要:面试题50:第一个只出现一次的字符。 1.在字符串中找到第一个只出现一次的字符。如输入"abaccdeff",则输出’b’。 最直观想法是从头开始扫描整个字符串,每当访问到一个字符时,拿这个字符和后面每个比较,如果在后面没有重复的字符,则这个字符就是只出现一次的字符,如果字符串有n个字符,则时间复杂
阅读全文
摘要:面试题49:丑数。我们把只包含因子2、3、5的数称为丑数。求按从小到大的顺序的第1500个丑数。如6、8是丑数,但14不是,因为14包含因子7,习惯上我们把1当做第一个丑数。 根据丑数定义,丑数只能被2、3、5整除,即,如一个数能被2(3或5)整除,就连续除以2(3或5),如果最后得到的是1,那么这
阅读全文
摘要:全局对象在程序启动时分配,在程序结束时销毁。局部自动对象在我们进入其所在的程序块时被创建,在离开块时销毁。局部static对象在第一次使用前分配,在程序结束时销毁。 除了自动和static对象外,C++还支持动态分配对象,动态分配的对象的生存期与他们在哪里创建是无关的,只有当显式地被释放,这些对象才
阅读全文
摘要:面试题46:把数字翻译成字符串。给定一个数字,我们按照如下规则把它翻译为字符串:0翻译成“a”,1翻译成“b”,…,25翻译成“z”。一个数字可能有多个翻译,如,12258有5种不同翻译,分别是“bccfi”、“bwfi”、“bczi”、“mcfi”和“mzi”,编程实现一个函数,计算一个数字有多少
阅读全文
摘要:1.把以下内容复制到一个txt内: @echo off pushd "%~dp0" dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt
阅读全文
摘要:关联容器中的元素是按关键字来保存和访问的,与之相对的顺序容器是按元素在容器中的顺序来保存和访问的。 关联容器支持高效的关键字查找和访问,两个主要的关联容器类型是map和set。map中的元素是一些键(关键字)值对,键起到索引的作用,值则表示与索引相关的数据。set中每个元素只包含一个关键字(关键字即
阅读全文
摘要:面试题43:1~n整数中1出现的次数。输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。 解法一:最直观的解法,累加1~n中每个1出现的次数,我们可以对10求余数判断整数的个位数字是不是1。如果这个数字大于10,在判断次低位时需要将数字除以10之后再判断除10后结果的个位数是不是1: #
阅读全文
摘要:面试题42:连续子数组的最大和。输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求子数组中数字的和的最大值,要求时间复杂度为O(n)。 直观解法是枚举数组中所有子数组并求出它们的和。一个长度为n的数组,总共有n(n+1)/2个子数组,计算出所有子数组的和,最快也要O
阅读全文
摘要:标准库容器很小,并未给每个容器添加大量功能,而是提供了一组算法,这些算法大多数都独立于任何特定的容器,这些算法是通用的,或者说是泛型的(generic),可用于不同类型容器和元素。 大多数泛型算法定义在头文件algorithm中,头文件numberic中也定义了一些。 一般,这些算法不直接操作容器,
阅读全文
摘要:面试题40:最小的k个数。输入n个数,找出其中最小的k个数。 最简单的方法就是排序数组,找出前k个数即可。这种思路时间复杂度为O(nlogn),太慢了。 法一:该方法时间复杂度为O(n)。此方法只有当我们可以修改输入数组时才能使用,基于快排的Partition函数,找到一轮排序后下标为k-1的数字,
阅读全文
摘要:C/C++中我们要养成使用指针或引用传递复杂类型参数的习惯,如采用值传递,则从实参到形参会产生一次赋值操作。 对同一算法用递归和循环的时间效率可能也不会一样,递归的本质是将一个大的复杂问题分解成两个或多个小的简单问题,如果小问题中有相互重叠的部分,那么直接使用递归实现虽然代码会比较简洁,但时间效率可
阅读全文
摘要:面试题37:序列化二叉树。实现两个函数,分别用来序列化和反序列化。 我们可以先把一棵二叉树序列化成一个前序遍历序列和一个中序遍历序列,然后在反序列化时通过这两个序列重构出二叉树。但该思路有两个缺点:一是该方法要求二叉树中没有值重复的节点;二是只有当两个序列中所有数据都读出后才能开始反序列化,如果两个
阅读全文
摘要:面试题36:二叉搜索树与双向链表。输入一棵二叉搜索树,将该二叉树转换成一个排序的双向链表。要求不能创建任何新节点,只能调整树中节点指针的指向。 二叉树中,每个节点都有两个指向子节点的指针,双向链表中,每个节点也有两个指针,分别指向前一个节点和后一个节点。在二叉搜索树中,所有左子节点的值总是小于父节点
阅读全文
摘要:元素在顺序容器中的顺序与其加入容器时的位置相对应。关联容器中元素的位置由元素相关联的关键字值决定。 所有容器类都共享公共的接口,不同容器按不同方式对其进行扩展。我们基于某种容器所学习的内容也都适用于其他容器。每种容器都提供了不同的性能和功能的权衡。 一个容器就是一些特定类型对象的集合。 所有顺序容器
阅读全文
摘要:分治法:把分解后的小问题各个解决,然后把小问题的解决方案结合起来解决大问题。 面试题35:复杂链表的复制。请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个节点除了有一个m_pNext指针指向下一个节点,还有一
阅读全文
摘要:面试题34:二叉树中和为某一值的路径。输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始,往下一直到叶节点所经过的节点形成一条路径。二叉树节点定义如下: struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m
阅读全文
摘要:面试题33:二叉搜索树的后序遍历序列。输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果(只要存在一个二叉搜索树的后序遍历结果为它即可)。如果是返回true,不是返回false。假设输入数组的任意两个数字都不相同。 后序遍历得到的序列中,最后一个数字是树的根节点的值。数组中前面的数字可分为
阅读全文
摘要:面试题32:从上到下打印二叉树。 (1)从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。 以上图为例,按层打印先打印根节点8,之后把第二层的6、10保存在队列中,现在队列中有两个节点,按从左到右的打印要求,我们先取出值为6的节点打印,之后把它的节点5、7入队列,然后出队列的值是1
阅读全文
摘要:C++不直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO。这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件、控制台窗口等。 IO库定义了读写内置类型值的操作。此外,一些类,如string,通常也会定义类似的IO操作,来读写自己类型的对象。 之前已经使用的IO库设施:i
阅读全文
摘要:面试题31:栈的压入、弹出序列。输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 解决这个问题很直观的想法是建立一个辅助栈,把输入的第一个序列中的数字依次压入该辅助栈,并按照第二个序列的顺序依次从栈中弹出数字。 判断方法:如果下一个要
阅读全文
摘要:面试题29:顺时针打印矩阵。输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 由于是以从外圈到内圈的顺序依次打印的,所以我们可以把矩阵想象成若干个圈。我们可以用循环打印矩阵,每次打印矩阵中的一个圈。 接下来分析循环结束的条件,假设这个矩阵的行数是rows,列数是columns,打印第一
阅读全文
摘要:类的基本思想是数据抽象和封装。数据抽象是一种依赖于接口和实现分离的编程技术,类的接口包括用户所能执行的操作,类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。封装实现了类的接口和实现的分离,封装后的类隐藏了它的实现细节,即类的用户只能使用接口而不能访问实现部分。 类要想实
阅读全文
摘要:面试题28:对称的二叉树。请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 遍历算法中的前序遍历是中左右的顺序遍历的,那么与它对称的树的中右左顺序遍历应该和它的前序遍历顺序相同。 但当一棵树的所有节点值都相等时,只要节点的数量相等,它的前序遍历和前序遍历
阅读全文
摘要:面试题27:二叉树的镜像。输入一棵二叉树,该函数输出它的镜像。二叉树的节点定义如下: struct BinaryTreeNode{ int m_nValue; BinaryTreeNode *m_pLeft; BinaryTreeNode *m_pRight; }; 依次交换每个节点的两个子树即可:
阅读全文