04 2020 档案
摘要:面试题68:树中两个节点的最低公共祖先。 可以先得到从根节点到这两个节点的路径,之后找出最后一个公共节点,代码中的树为: #include <iostream> using namespace std; struct TreeNode { int m_nValue; vector<TreeNode*
阅读全文
摘要:面试题66:构建乘积数组。给定一个数组A[n],请构建一个数组B[n],其中B[i]=A[0]xA[1]x…xA[i-1]xA[i+1]x…xA[n-1],不能使用除法。 如没有不能使用除法的限制,可以用A中所有元素的乘积除A[i]来得到B[i],此时要注意A[i]=0的情况。 法一:连乘n-1个数
阅读全文
摘要:面试题65:不用加减乘除做加法。 5的二进制是101,7的二进制是10001。我们试着把计算分为3步: 1.各位相加但不计进位,得到的结果是10100。 2.记下进位,此例中只有最后一位有进位,结果是二进制10。 3.把前两步的结果相加,结果为10110,正好是22。 我们用位运算翻译上述步骤: 1
阅读全文
摘要:面试题23:链表中环的入口节点。如果一个链表中包含环,如何找出环的入口节点? 解决这个问题的第一步是如何确定一个链表中存在环。我们可以定义两个指针,初始化为指向头节点的指针。两个指针同时从链表头部出发,一个指针一次走一步,另一个指针一次走两步,如果走的快的指针追上了走得慢的指针,那么链表就包含环,如
阅读全文
摘要:面试题21:调整数组顺序使奇数位于偶数前面。输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。 如果不考虑时间复杂度,最简单的思路是从头扫描这个数组,每碰到一个偶数,拿出这个数字,并把位于这个数字后面的所有数字往前挪动一位,挪完之后数
阅读全文
摘要:面试题20:表示数值的字符串。请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100"、“5e2”、"-123"、“3.1416"及”-1E-16"都表示数值,但"12e"、“1a3.14”、“1.2.3”、"±5"及"12e+5.4"都不是。 表示数值的字符串遵循模式A
阅读全文
摘要:打开服务,然后查阅所有SQL Server的项,服务名后边的括号中的字符串就是实例名。一般默认是MSSQLSERVER。
阅读全文
摘要:泛型编程与OOP都能处理在编写程序时不知道类型的情况,但泛型编程在编译时能获知类型。 模板是泛型编程的基础,它是创建一个类或函数的蓝图或公式。vector为泛型类,find为泛型函数。 当多个函数除了形参类型外完全相同,可以用泛型函数将多个函数简化为一个,以下为一个函数模板,它可以比较任何定义了<号
阅读全文
摘要:面试题63:假设把某股票的价格按照时间先后顺序存储在数组中,买卖该股票一次可能获得的最大利润是多少?如输入{9,11,8,5,7,12,16,14},则我们在价格为5时买入,在价格为16时卖出可以获得最大利润11。 最简单的就是蛮力法,找出数组中所有数对,求出它们的差值,找出最大差值,由于数组中有O
阅读全文
摘要:面向对象程序设计(OOP)基于三个概念:数据抽象(只暴露类的接口,而如何实现的是不透明的,即类的接口和实现分离)、继承(能实现相似的类型)、动态绑定(忽略相似类型的区别,以统一方式使用它)。 继承关系联系在一起的类构成层次关系,在最低层有一个基类,其他类直接或间接地从基类继承而来,称为派生类。基类负
阅读全文
摘要:面试题57:和为s的数字。 1.输入一个递增的数组和一个数字s,在数组中查找两个数,使它们的和正好是s,输出一对这样的数即可。 即使是不好的直观解法,想到后也要告诉面试官,这样显得思维敏捷,如一种时间复杂度为O(n²)的解法,固定数组中的一个数字,然后依次判断数组中其余n-1个数字与它的和是否为s。
阅读全文
摘要:C++允许我们自定义类类型之间的转换规则。 重载的运算符是具有特殊名字的函数,它的名字由operator和运算符构成。 重载的运算符函数参数数量与该运算符作用的运算对象的数量一样多,一元运算符有一个参数,二元运算符有两个参数,且二元运算符的左侧运算对象传递给第一个参数,右侧运算对象传递给第二个参数。
阅读全文
摘要:面试题56:数组中数字出现的次数。 1.一个整型数组里除两个数字之外,其他数字都出现了两次,找出这两个只出现一次的数字,要求时间复杂度O(n),空间复杂度O(1)。 先分析如果只有一个数字出现一次,而其他数字都出现了两次,我们就可以依次异或数组中的每个数字,由于异或运算满足交换律,因此只要异或序列中
阅读全文
摘要:面试题55:二叉树的深度。 1.输入一棵二叉树,求该树的深度。 只需遍历整棵树的每一条路径找出最长的即可,以下代码中的树结构为: #include <iostream> using namespace std; struct BinaryTreeNode { int m_nValue; Binary
阅读全文
摘要:拷贝构造函数和移动构造函数定义了当用同类型的另一个对象初始化本对象时做什么;拷贝赋值运算符和移动赋值运算符定义了将一个对象赋予同类型的另一个对象时做什么;析构函数定义了当此类型对象销毁时做什么。这些操作被称为拷贝控制操作。(以上移动构造函数和移动赋值运算符是C++ 11新标准引进的) 当一个类没有定
阅读全文
摘要:面试题54:二叉搜索树的第K大节点。给定一棵二叉搜索树,找出其中第K大的节点。 该题问法有问题,应该问从小到大第K个节点值为多少,这样才是书上代码的含义,即中序遍历到第K个元素,以下代码以下图二叉搜索树为例: #include <iostream> using namespace std; stru
阅读全文
摘要:面试题53:在排序数组中查找数字。 1.统计一个数字在排序数组中出现的次数。 解法:在排序数组中使用二分查找算法,直到找到第一个指定数字,之后遍历这个数字的左右两边,直到遍历到非这个数字的值,就可以得到出现次数。但要查找的数字可能在长为n的数组中出现O(n)次,时间复杂度是O(n),太慢了。 改进的
阅读全文