摘要:
【面试题034】丑数题目: 我们把只包含因子2、3和5的数称为丑数(Ugly Number)。 求按从小到大的顺序的第1500个丑数。 例如6、8都是丑数,但14不是,因为他包含因子7。习惯上我们把1当做第一个丑数。思路一: 逐个的判断,效率不高。1234567891011121314151... 阅读全文
摘要:
【面试题033】把数组排成最小的数题目: 输入一个正整数数组,把数组里所有数字拼接起来排成一个数, 打印能拼接出的所有数字中最小的一个。 例如输入数组{3, 32, 321},则打印出这3个数字能排成的最小数字321323。思路一: 最直观的想法是求出所有数字的全排列,然后取最小值即可, ... 阅读全文
摘要:
【面试题032】从1到n整数中1出现的次数题目: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。 例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1出现了5次。思路一: 对每一个数字做判断,把1出现的数字累加。 可以通过对10取余,判断这个数字个位上的... 阅读全文
摘要:
【面试题031】连续子数组的最大和题目: 输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。要求时间复杂度为O(n)。思路一: 枚举出数组的所有子数组并求出他们的和,最快也需要O(n^2)的时间,思路二: 举例分析数组的规律,如果加... 阅读全文
摘要:
【面试题030】最小的k个数题目: 输入n个整数,找出其中最小的k个数。 例如输入4、5、1、6、2、7、3、8这8个字,则其中最小的4个数字是1、2、3、4。思路一: 可以同样的基于随机快速排序的Partition函数,来对数组做划分, 基于k来作调整,返回调用Partition函数,直到... 阅读全文
摘要:
【面试题029】数组中出现次数超过一半的数字题目: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, 2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.思路一: 对数组排序最快O(n*l... 阅读全文
摘要:
【面试题028】字符串的排列题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有的字符串abc,acb,bac,bca,cab和cba。StringPermutation.cppC++ Code12345678910111213141... 阅读全文
摘要:
【面试题027】二叉搜索树与双向链表题目: 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调用书中结点的指向。二叉树的结点定义如下:C++ Code123456structBinaryTreeNode{intm_nValue;BinaryTreeNode... 阅读全文
摘要:
【面试题026】复杂链表的复制请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中的任意结点或者NULL。结点的C++定义如... 阅读全文
摘要:
【面试题025】二叉树中和为某一值的路径只有前序遍历,首先访问根结点。前序遍历访问到某个结点,把该结点添加到路径上,并累加该结点的值,递归函数推出前,要在路径上删除当前结点,并且减去当前结点的值,递归返回的条件是到了叶子结点。保存路径的数据结构实际上就是一个栈。PathInTree.cpp:1234... 阅读全文