面试题
宝蓓
努力变强的IT男
展开
-
【代码和思路都有】2017面试题:搜狐,彩虹宝石项链
题目描述有一条彩色宝石项链,是由很多种不同的宝石组成的,包括红宝石,蓝宝石,钻石,翡翠,珍珠等。有一天国王把项链赏赐给了一个学者,并跟他说,你可以带走这条项链,但是王后很喜欢红宝石,蓝宝石,紫水晶,翡翠和钻石这五种,我要你从项链中截取连续的一小段还给我,这一段中必须包含所有的这五种宝石,剩下的部分你可以带走。如果无法找到则一个也无法带走。请帮助学者找出如何切分项链才能够拿到最多的宝石。输入描述我们用原创 2017-12-06 00:12:49 · 628 阅读 · 0 评论 -
剑指Offer——面试题41:和为s的两个数字 VS 和为s的连续正数序列
和为s的两个数字题目:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。输入:{1,2,4,7,11,15}输出:4 11思路:1、利用两个指针,1个指针指向第一个数字,另一个指针指向最后一个数字 2、如果前者+后者>s,那么后一个指针往前面走 3、如果前者+后者/*思路:利用2个指针,1个...原创 2018-05-19 15:06:55 · 171 阅读 · 0 评论 -
剑指Offer——面试题45:圆圈中最后剩下的数字
圆圈中最后剩下的数字题目:0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。输入:5,3输出:3思路:1、利用两个指针,1个指针指向第一个数字,另一个指针指向最后一个数字 2、如果前者+后者>s,那么后一个指针往前面走 3、如果前者+后者/*思路:利用2个指针,1个指针指向第一个数字,1个指针...原创 2018-05-21 16:08:40 · 561 阅读 · 0 评论 -
LeetCode——665:非递减数列
非递减数列题目:给定一个长度为 n 的整数数组,你的任务是判断在最多改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中所有的 i (1 <= i < n),满足 array[i] <= array[i + 1]。输入:[4,2,3]、[4,2,1]输出:”true”、”false”解释:1、对于[4,2,3...原创 2018-05-25 16:47:32 · 4513 阅读 · 0 评论 -
剑指Offer——面试题47:不用加减乘除做加法
不用加减乘除做加法题目:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、×、÷四则运算符号输入:5 7输出:12思路:我们分解一下两个数字相加,1、各个位数上的数字相加,但不考虑进位;2、考虑进位;3、将前面两步的结果相加。 对于不能使用四则运算,我们能用的就是位运算,而位运算是针对二进制的。所以,我们根据十进制数的相加方式来考虑二进制。 对于二进制,1、各个位数...原创 2018-05-22 21:12:33 · 399 阅读 · 0 评论 -
LeetCode——第4题:两个排序数组的中位数
两个排序数组的中位数题目:给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。输入:nums1 = [1, 3];nums2 = [2]输出:2.0这道题一个比较通俗的思路是:将两个已排序的序列,遍历一次,排成一个总的序列,然后再找出其中位数。但是!这样思路的算法时间复杂...原创 2018-05-27 15:34:13 · 7497 阅读 · 0 评论 -
剑指Offer——面试题53:正则表达式匹配
正则表达式匹配题目:请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配输入:”aaa a.a”、”aaa aa.a”输出:”true”、”fa...原创 2018-05-23 20:38:35 · 227 阅读 · 0 评论 -
剑指Offer——面试题29:丑数
丑数题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。输入:{7}输出:9暴力的方法我就不说,对于每个数字都判断是不是丑数,然后累计丑数的数量有没有达到N个 利用丑数的规律,来做的思路:1、后面的丑数其实是前面的丑数,乘以2/3/5所得到...原创 2018-07-29 12:35:25 · 207 阅读 · 0 评论 -
剑指Offer——面试题31:整数中1出现的次数
整数中1出现的次数(从1到n整数中1出现的次数)题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。输入:13输出:...原创 2018-07-29 12:50:48 · 634 阅读 · 0 评论 -
剑指Offer——面试题39:平衡二叉树
看到一篇介绍思路挺好的文章,记录下来: 平衡二叉树的详解转载 2018-07-29 20:24:42 · 175 阅读 · 0 评论 -
剑指Offer——面试题25:二叉搜索树与双向链表
正则表达式匹配 题目:请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配输入:”aaa a.a”、”aaa aa.a” 输出:”true”、”fals...原创 2018-07-22 18:00:07 · 160 阅读 · 0 评论 -
LeetCode——第92题:指定区间内翻转链表(反转链表 II)
指定区间内翻转链表题目:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。 说明: 1 ≤ m ≤ n ≤ 链表长度。输入:1->2->3->4->5->NULL, m = 2, n = 4输出:1->4->3->2->5->NULL这道题的重点是:找到需要翻转的区间 总共需要4个指针,其中1个是添加一个虚...原创 2018-08-20 21:00:12 · 5031 阅读 · 0 评论 -
面试题:利用堆排序实现从n个数字中找出前top-k大的数字
用堆排序(最小堆):top-k最大的数字题目:top-k算法,从n个大小的数组中,找出k个最大的数字并输出输入:数组大小n=10;k的值为5;数组为:9,8,3,2,10,20,13,1,5输出:20,13,10,9,8思路:1、维护k个最小堆,如果某个新进来的数字大于最小堆的根节点,那么将根节点换为新进来的数字,然后在对最小堆进行调整。 2、在找出k个大的数字后,对k个...原创 2018-04-27 10:50:04 · 6492 阅读 · 0 评论 -
剑指Offer——面试题30:最小的k个数
最小的k个数题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。输入:8 4 4 5 1 6 2 7 3 8输出:1 2 3 4思路:1、首先,使用快排中的思路:每进行一次快排,会确定一个位置上的数字,使得该位置前的数字都小于该数字,而该位置后的数字都大于该数字。 2、所以,要找最小的k个数,即某一次...原创 2018-05-11 10:17:36 · 221 阅读 · 0 评论 -
面试题:中序表达式如何转为前序表达式和后序表达式
中序表达式转为前序表达式和后序表达式题目:将中序表达式转换为前缀表达式和后缀表达式,例如: (a+b)c(d-e/f) 转换成前缀表达式是:*-/fed*c+ba ,转换为后缀表达式是:ab+c*def/- *输入:(a+b)c(d-e/f)输出:前缀:*-/fed*c+ba,后缀表达式是:ab+c*def/- *后缀表达式的转换规则: 1.遇到操作数:直接输出(...原创 2018-04-26 10:44:29 · 3889 阅读 · 1 评论 -
(网易2018秋季校招笔试,最详细、易懂的解法)[编程题] 游历魔法王国
题目描述魔法王国一共有n个城市,编号为0~n-1号,n个城市之间的道路连接起来恰好构成一棵树。小易现在在0号城市,每次行动小易会从当前所在的城市走到与其相邻的一个城市,小易最多能行动L次。如果小易到达过某个城市就视为小易游历过这个城市了,小易现在要制定好的旅游计划使他能游历最多的城市,请你帮他计算一下他最多能游历过多少个城市(注意0号城市已经游历了,游历过的城市不重复计算)。输入描述...原创 2018-03-10 15:31:23 · 1088 阅读 · 0 评论 -
剑指Offer——面试题28:字符串的排列
字符串的排列题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符串a、b、c所能排列出的所有字符串abc、acb、bac、bca、cab和cba。输入:abc 输出:abc acb bac bca cab cba 思路:1、用一次遍历,将问题分开来做 2、比如只考虑第一个字符放什么,比如第一个字符可以放a...原创 2018-03-24 00:16:36 · 200 阅读 · 0 评论 -
剑指Offer——面试题51:数组中重复的数字
数组中重复的数字题目:在一个长度为n的数组里的全部数字都在0到n-1的范围内。数组中某些数字是反复的,但不知道有几个数字反复了。也不知道每一个数字反复的次数。请找出数组中随意一个反复的数字。比如假设输入长度为7的数组{2,3,1,0,2,5,3},那么相应的输出是反复的数字2或者3.输入:{2,3,1,0,2,5,3}输出:2,3思路:1、用一次遍历,在遍历数组a的第一...原创 2018-03-24 15:10:04 · 335 阅读 · 0 评论 -
剑指Offer——面试题29:数组中出现次数超过一半的数字
数组中出现次数超过一半的数字题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。输入:{1,2,3,2,2,2,5,4,2}输出:2思路:1、针对本道题的特点,用一次遍历即时间复杂度为O(n),空间复杂度为O...原创 2018-03-24 15:45:04 · 212 阅读 · 0 评论 -
剑指Offer——面试题33:把数组排成最小的数
把数组排成最小的数题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。输入:{3,32,321}输出:321323思路:1、主要的思路是利用递归去判断两个数字m和n,合并后是mn大还是nm大。 2、在这里需要注意如...原创 2018-03-24 21:42:02 · 257 阅读 · 0 评论 -
面试题——字符串去重
对于字符串去重这个问题,要求时间和空间复杂度都很小,我思考了很久,不知道用set会不会相对来说小一些,希望大牛们给我指正一下。接下来介绍一下set和multiset都是基于红黑树实现的,其中查找、删除和插入操作都只需要O(logk)时间。 set和multiset所需的头文件: #include定义:set/multiset <类型> 名字。 set与mul...原创 2018-03-24 22:36:40 · 3439 阅读 · 0 评论 -
剑指Offer——面试题4:替换空格
替换空格题目:请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。输入:”We Are Happy.”输出:”We%20Are%20Happy.”思路:1、先遍历一遍字符串,找到原字符数组的长度和空格的个数 2、然后对于每个空格为字符数组长度...原创 2018-04-07 17:15:41 · 164 阅读 · 0 评论 -
剑指Offer——面试题6:重建二叉树
重建二叉树题目:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示的二叉树并输出它的头结点。 输入:前序:{1,2,4,7,3,5,6,8}和中序{4,7,2,1,5,3,8,6}输出:重建的...原创 2018-04-07 21:04:23 · 485 阅读 · 0 评论 -
leetcode—从两个有序数组中寻找他们并集的第k小元素(思路)
从两个有序数组中寻找他们并集的第k小元素题目:两个排好序的数组A,B,大小分别为m,n,找到两个数组中所有元素的 第k小的元素 但是这种思路有一个问题,那就是如果A中元素没有k/2-1个的时候,就没办法用上述方法判断,不过此时可以使用取A中的所有元素,取B中的前k-m个元素 也可以按比例来取,比如取A中的前(m/(m+n))*k个元素,取B中前(k-(m/(m+n))*k)个元...转载 2018-03-25 17:10:31 · 3016 阅读 · 0 评论 -
剑指Offer——面试题36:数组中的逆序对
数组中的逆序对题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,有一个数组为Array[0..n] 其中有元素a[i],a[j].如果 当i &lt; j时,a[i]&gt;a[j],那么我们就称(a[i],a[j])为一个逆序对。在数组{7,5,6,4}中一共存在5对逆序对,分别是(7,6),(7,5),...原创 2018-03-31 21:08:02 · 348 阅读 · 0 评论 -
归并排序(思想+C代码)
归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。思路: 1、先将数组一半一半分开,直到分成2个为一组时; 2、然后再对每2个数字组成的数组内部先进行排序 3、然后再对数组间进行合并; 4、如此递归下去,就形成了归并排序。归并排序的时间复杂度为O(nlog2n),空间复杂度为O(n)...原创 2018-03-28 16:34:01 · 277 阅读 · 0 评论 -
剑指Offer——面试题39:二叉树的深度(如何判断某棵二叉树是否是平衡二叉树)
求二叉树的深度题目:输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。例如下图中的二叉树的深度为4,因为它从根结点到叶结点最长的路径包含4个结点(从根结点1开始,经过结点2和结点5,最终到达叶结点7)。输入:二叉树如下图输出:二叉树的深度为4思路:1、利用递归的思想,对于每个节点,判断它的...原创 2018-05-02 11:38:27 · 1169 阅读 · 0 评论 -
LeetCode——第12题:带最小值的栈(min栈)
带最小值操作的栈(min栈)题目:实现带有最小值min方法的栈 说明: 实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。 你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。输入:push(1),pop(),push(2),push(3),min(), push(1),min()输出:1,2,1这道题总共有三种解法...原创 2018-09-02 09:55:11 · 1020 阅读 · 0 评论