C++面试题
wwxjya
这个作者很懒,什么都没留下…
展开
-
将一个二叉搜索树转化为有序双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路: 根据二叉搜索树的特点,左子树的结点<根节点<右子树的结点,我们可以按照二叉树中序遍历的顺序对该二叉树的指针进行调整,使得二叉树变为一个有序的双向链表。 采用递归的思路,先对左子树进行转换, 再处理根节点,让根节点的做指针指向它的前驱节点;...原创 2018-06-21 10:09:21 · 575 阅读 · 0 评论 -
数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路:要求出数组中出现超过一般的数字,也就意味着要统计每个数字出现的次数。可以利用哈希表,定义一个数组,在每个数字下标的地方存放该下标数字出现的次数。这样统计完后,就可以在进行一次...原创 2018-07-11 16:25:41 · 144 阅读 · 0 评论 -
逆序栈(使用递归)
题目:一个栈依次压入1,2,3,4,5那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现了栈中元素的逆序,请设计一个算法实现逆序栈的操作,但是只能用递归函数来实现,而不能用另外的数据结构。给定一个栈Stack以及栈的大小top,请返回逆序后的栈。解题思路:借助递归,利用辅助函数,在调用辅助函数的函数定义一个栈,用来存放逆序后的结果;在辅助函数内进...原创 2018-07-11 16:21:37 · 634 阅读 · 0 评论 -
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。
题目:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数。解题思路:可以借用一个临时栈帮助遍历数据并存放数据。代码实现:class Solution { stack<int> s;public: void push(int value) { s.push(value); } void pop() { ...原创 2018-07-10 15:47:34 · 1264 阅读 · 0 评论 -
将一个有序的链表转化为一个二叉搜索树
题目:Given a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST.解题思路:解决这道题目,首先要想到的就是二叉树是递归定义的。所以我们在将链表转化为二叉树时,就要先从递归的角度入手。我们知道二叉搜索树是根节点比左子树的所有节点大,比右子树的所...原创 2018-07-09 18:32:12 · 279 阅读 · 0 评论 -
链表的旋转
题目:Given a list, rotate the list to the right by k places, where k is non-negative.For example:Given1->2->3->4->5->NULLand k =2,return4->5->1->2->3->NULL.解题思路:观察发现,如果我们将元...原创 2018-07-09 18:17:07 · 224 阅读 · 0 评论 -
删除链表的倒数第n个节点
题目:Given a linked list, remove the n th node from the end of list and return its head.For example, Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from th...原创 2018-07-09 18:05:22 · 107 阅读 · 0 评论 -
双栈排序
题目:请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector&ltint>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。思路:代码实现:class TwoStacks {public: ...原创 2018-07-09 16:44:25 · 182 阅读 · 0 评论 -
连续子数组的最大和
题目:一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3解题思路:方案一:可以使用暴力求解的方式,直接用两层for循环来解决问题,是一个O(n^2)的算法方案二:从头开始遍历数组,每遍历一个元素sum+=array[i],若此时sum<array[i],就说明从array[i]开始的子数组的和大于前面的子数组的和,所以令sum=...原创 2018-06-19 12:52:49 · 139 阅读 · 0 评论 -
二维数组中的查找
题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。解决思路:对于这样一个数组,我们可以观察到如果从右上角的元素开始比较,如果target>该元素,那么一定是++i; ...原创 2018-06-19 11:57:19 · 104 阅读 · 0 评论 -
正则表达式匹配
问题:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配解决思路:首先,我们考虑字符串匹配都有哪些情况:1)模式串的下一个字符为*: a)匹...原创 2018-06-19 11:46:54 · 119 阅读 · 0 评论 -
找出字符串中第一个只出现一次的字符
题目:找出字符串中第一个只出现一次的字符输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1示例1输入asdfasdfo输出o解题思路:和找出一个数组中只出现一次的数字方法类似,都是利用哈希表的思想来统计每个字符或数字出现的次数。然后在进行遍历,以返回只出现一次的数字或字符。这个题的难点主要在于要自己设计main函数用来打印结果。值得注意的是,在这种题目中一定要循...原创 2018-07-11 16:49:05 · 409 阅读 · 0 评论