![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试题
文章平均质量分 55
__boostdd
在校学生,对编程以及算法有浓厚的兴趣。
展开
-
设计一个栈,提供一个函数能够找出栈内最大的元素,时间复杂度为O(1)
这是一道淘米网的面试题,当时面试官直接拿出一张纸来让我写出实现方法。我思考了一会,就是关于时间复杂度这块,实在是没有办法,因为我想的都是要遍历一遍这个栈,这样肯定超了,在面试完回来之后,我思考了一段时间,网上了解了一下,得出一个解题思路想要找出最大的数,且时间复杂度为O(1),那么就一定要知道这个最大的数在哪放着,那么我们就可以一次性的找到他。利用栈的特性,我可以一次压2个数,一个数是原创 2015-09-21 13:40:04 · 2994 阅读 · 0 评论 -
将一个链表从后到前进行打印
题目是:有一个链表,需要从后到前将其节点内的值进行打印一份,我们知道单链表的访问是从头结点开始,一个一个向后访问,如果想要首先输出尾节点的话,就要将链表访问过的这些值存起来,然后最后再倒序输出即可,此时,应用栈是一个非常不错的想法。#include #include using namespace std;struct listNode{ int value; lis原创 2016-05-07 08:35:46 · 445 阅读 · 0 评论 -
寻找二维矩阵里的一个数
题目是:一个二维矩阵,给一个数,判断这个数存不存在于这个矩阵当中,当然,这个矩阵也是一个有规律的矩阵。即从上往下,从左往后都是递增的。最普通的就是从上到下,从左到右一个一个的进行判断寻找。这时,在最坏情况下,就得将整个矩阵轮训一遍。那么时间复杂度就为O(N),那么可不可以减少呢?就要从这个矩阵的特殊地方开始了。因为这个矩阵是从上到下,从左到右递增的,那么我们可以首先将第一行最后一列的元素和原创 2016-05-07 08:25:28 · 901 阅读 · 0 评论 -
填补空格
题目大意是这样的:有一个字符串"we are happy"将其中的空格替换成"%20"然后输出是“we%20are%20happy”即可。这个题一般有这样的解法,一个是将字符串进行轮训,遇到一个空格,将空格后的字符向后挪2个字符,然后插入%20即可,然后继续轮训到下一个空格,再将空格后的字符串向后挪2位,等等,一直到所有的空格都被替换。这个算法的复杂度为O(N2)。另一个解法,将字符串先轮原创 2016-05-06 22:25:13 · 680 阅读 · 0 评论 -
用两个栈实现一个队列
面试题中,用两个栈来实现一个队列是一个经常被问到的问题。这个题的主要思想是一个栈用来插入,另一个栈用来转出,在转出前,如果转出栈为空,则必须将插入栈内的元素先放到转出栈中,然后弹出元素,如果不为空,则直接将转出栈内的元素弹出即可。而插入则没有这么多繁琐的步奏,直接向插入栈中插入元素即可看代码。#include #include using namespace std;cl原创 2016-05-06 22:13:01 · 345 阅读 · 0 评论 -
单例模式
单例模式是一个经常被面试官问道,并且让被面试者现场写的一个题目,单例模式主要就是让整个程序从始到终就只有一个对象存在,就像windows里面的任务管理器,在系统启动的过程中,就只能存在一个。单利模式的书写主要就是一个静态对象,一个可以调用并生成该对象的方法,以及隐藏构造函数,拷贝构造函数,重载赋值操作符等。下面贴代码#include #include #include using原创 2016-05-06 14:45:56 · 533 阅读 · 0 评论 -
为string类添加一个赋值运算符函数
面试中经常会被要求写一个string类,其实通过写string类就可以看出来一个人对C++的掌握能力。其实写string类主要就是看赋值运算符的重载函数的写法。在这里我自己实现了两种。如果大家有更好的办法请给我留言。#include #include #include using namespace std;class cstring{ public: cstr原创 2016-05-06 01:24:42 · 2053 阅读 · 0 评论 -
单词翻转。
面试题。要求将一句话中的单词不变,但是单词的顺序在句子中翻转。主要的思想就是将句子中的单词进行翻转,然后再将整个句子中的字符进行翻转,就可以达到效果。eg:I am a boy --> I ma a yob -->boy a am I其实这就是两个函数的作用,一个是分离单词的,一个是反转单词的。代码如下:#include using namespace std;原创 2015-09-23 20:44:12 · 716 阅读 · 0 评论 -
求一个数组中第k大的数,要求不能另外申请空间,数组顺序不能被改变
这是一道今日头条的面试题,当面试官提出这样一道题目时。我想相信,大多数人都会这样反应1.是不是可以先排一下序,然后再求第k大的,然后就想到数组顺序不能被改变,然后否定了2.是不是可以用小堆来做。我创建一个堆大小为k的小堆,然后把这些数据全部扔进小堆中,除了堆顶,其他的数要么就被丢弃了要么就因为大于k而沉入堆底,而最后第k大的数就是堆顶那个数。然后想到不能申请空间,这个想法也被否定了。原创 2015-09-21 20:07:30 · 1294 阅读 · 1 评论 -
重建二叉树
题目:给定一棵二叉树的前序和中序遍历的序列,然后根据这个序列重建一棵二叉树。这个题主要考察对二叉树的熟悉程度以及如何使用这两种遍历来得出最终的二叉树的过程。首先,可以根据前序遍历的第一个节点来确定整棵树的根节点,然后用此节点的值在中序中寻找,中序遍历中这个值的左边的序列就是左子树,右边的序列就是右子树然后递归调用即可得出最终的二叉树。看代码#include using names原创 2016-05-07 09:14:50 · 729 阅读 · 0 评论