03 2020 档案

摘要:题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 思路 在层次遍历的基础上,定义两个变量:curLevelNodesNum表示当前层的节点数量,nextLevelNodesNum表示下一层的节点数量。当向队列中插入节点时,nextLevelNodesNum++,当弹出节点时 阅读全文
posted @ 2020-03-26 21:30 Flix 阅读(117) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。如果当前字符流没有存在出现一次的字符,返回 字符。 思路 类似于 "面试题50 阅读全文
posted @ 2020-03-26 20:52 Flix 阅读(78) 评论(0) 推荐(0)
摘要:题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1 2 3 3 4 4 5 处理后为 1 2 5 思路 用一个指针pre指向重复子链表的第一个节点的前一个节点,用另一个指针指向重复子链表的最后一个节点cur,这样遇到重复节点,使p 阅读全文
posted @ 2020-03-26 20:43 Flix 阅读(116) 评论(0) 推荐(0)
摘要:题目描述 我们可以用2x1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2x1的小矩形无重叠地覆盖一个2xn的大矩形,总共有多少种方法? 思路 可以推一下:用2x1的小矩形覆盖2x1的大矩形共1种方法,覆盖2x2的矩形共2种方法,覆盖2x3的矩形共3种方法,覆盖2x4的矩形共5种方法,可以看出方法 阅读全文
posted @ 2020-03-26 10:20 Flix 阅读(150) 评论(0) 推荐(0)
摘要:题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 用f(n)表示青蛙跳上一个n级(n =1)的台阶总共的跳法数。对于n级台阶,青蛙的第一步可以跳1级,此时剩余n 1级共f(n 1)种跳法;第一步也可以跳2级,此时剩余n 2 阅读全文
posted @ 2020-03-25 17:48 Flix 阅读(134) 评论(0) 推荐(0)
摘要:题目描述 将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 思路 首先判断该数字是整数还是负数,然后在转换的过程中判断字符串表示的数字是否溢出。题目的数字范围是有符号的int型整数,有符号的int型整数(4个字节)的范围为 2147483 阅读全文
posted @ 2020-03-24 18:20 Flix 阅读(165) 评论(0) 推荐(0)
摘要:题目描述 给定一个数组A[0,1,...,n 1],请构建一个数组B[0,1,...,n 1],其中B中的元素B[i]=A[0]\ A[1]\ ...\ A[i 1]\ A[i+1]\ ...\ A[n 1]。不能使用除法。(注意:规定B[0] = A[1] \ A[2] \ ... \ A[n 1 阅读全文
posted @ 2020-03-24 16:57 Flix 阅读(109) 评论(0) 推荐(0)
摘要:题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+、 、 、/四则运算符号。 思路 用位运算来模拟加法。两个二进制数之间的异或相当于不考虑进位的加法,如1010^1011=0001(对应十进制10^11=1),因为只有1+1才会产生进位,所以通过与运算计算进位1010&1011=1010 阅读全文
posted @ 2020-03-20 17:38 Flix 阅读(121) 评论(0) 推荐(0)
摘要:题目描述 求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 思路 1+2+...+n = n(n+1)/2,题目要求不能用乘法,但可以使用sizeof求布尔型(占一个字节)二维数组a[n][n+1]来求n( 阅读全文
posted @ 2020-03-20 16:53 Flix 阅读(103) 评论(0) 推荐(0)
摘要:题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m 1的那个小朋友要出列唱首歌,然后可以在礼品箱中任 阅读全文
posted @ 2020-03-20 16:37 Flix 阅读(117) 评论(0) 推荐(0)
摘要:## 题目描述 LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺 阅读全文
posted @ 2020-03-20 16:16 Flix 阅读(130) 评论(0) 推荐(0)
摘要:题目描述 给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4] 阅读全文
posted @ 2020-03-20 11:39 Flix 阅读(112) 评论(0) 推荐(0)
摘要:题目描述 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它! 阅读全文
posted @ 2020-03-20 10:40 Flix 阅读(106) 评论(0) 推荐(0)
摘要:题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a 阅读全文
posted @ 2020-03-19 21:17 Flix 阅读(143) 评论(0) 推荐(0)
摘要:题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快 阅读全文
posted @ 2020-03-19 17:28 Flix 阅读(130) 评论(0) 推荐(0)
摘要:题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 思路 我们可以选择数组第一个数字a[left]和数组最后一个数字a[right]作为初始的两个数,这样两个数字的和t=a[left]+a[right]。如果t= 阅读全文
posted @ 2020-03-19 16:51 Flix 阅读(109) 评论(0) 推荐(0)
摘要:题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。 思路 假设一个数组中有 3 个数字,其中两个数字相同,那么这3个数字异或的结果就是那个只出现一次的数字,例如数组为 [1,2,1],则 1^2^1=2。题目中给的数组中存在两个只出现一次的数字,所 阅读全文
posted @ 2020-03-19 16:14 Flix 阅读(119) 评论(0) 推荐(0)
摘要:题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。 思路1 求出左右子树的长度来判断。代码如下: 思路2 思路1先根据根结点的左右子树深度判断是否是平衡二叉树,然后根据左右子树的左右子树判断,是从上到下的过程,这一过程底层的节点会被重复遍历,影响性能。如果我们用后序遍历的方式遍历每个节点,那么 阅读全文
posted @ 2020-03-18 20:56 Flix 阅读(128) 评论(0) 推荐(0)
摘要:题目描述 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 思路 一棵二叉树的深度是其左子树和右子树深度的最大值+1。拿左子树的深度来讲,左子树的深度等于其左右子树深度的最大值+1。递归这一过程即可,代码如下: 阅读全文
posted @ 2020-03-18 20:21 Flix 阅读(103) 评论(0) 推荐(0)
摘要:题目描述 给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。 思路 这个题考了二叉搜索树的一个性质:二叉搜索树的中序遍历序列是递增的。所以我们中序遍历一遍二叉排序树并记录下来,然后输出第k小的节点即可。代码如下: 阅读全文
posted @ 2020-03-18 20:11 Flix 阅读(127) 评论(0) 推荐(0)
摘要:题目描述 统计一个数字k在排序数组中出现的次数。 思路1 直接遍历数组一遍,统计出现的次数,时间复杂度为O(logn)。代码如下: 由于二分查找的时间复杂度为O(logn),所以该算法的时间复杂度为O(logn)。 阅读全文
posted @ 2020-03-18 17:26 Flix 阅读(159) 评论(0) 推荐(0)
摘要:题目描述 输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的) 思路 由于数据结构是链表,若两个链表存在公共节点,则从该公共节点往后的节点也是公共节点。 如果两个链表长度相等,则从头开始同时遍历两个链表,两个链表第一个相同 阅读全文
posted @ 2020-03-18 16:17 Flix 阅读(174) 评论(0) 推荐(0)
摘要:## 题目描述 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写). ## 思路1 遍历字符串,判断当前字符是否在当前字符之后出现过,也就是需要两个循环,时间复杂度为O(n^2)。 ## 思路2 使用哈 阅读全文
posted @ 2020-03-18 11:31 Flix 阅读(142) 评论(0) 推荐(0)
摘要:题目描述 把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。 思路1 对每个数字都判断该数字是不是丑数,然后返回第N个丑数即可。丑数的判断方法是:如果一个数字能被2整除 阅读全文
posted @ 2020-03-18 11:09 Flix 阅读(113) 评论(0) 推荐(0)
摘要:题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 思路1 求出数组中所有元素的排列,然后找出最小的数返回。求字符串的排列可以参考 "面试题38:字符串的排列" , 阅读全文
posted @ 2020-03-17 22:50 Flix 阅读(132) 评论(0) 推荐(0)
摘要:题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6, 3, 2,7, 15,1 阅读全文
posted @ 2020-03-17 20:39 Flix 阅读(116) 评论(0) 推荐(0)
摘要:题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。 思路1 阅读全文
posted @ 2020-03-16 23:32 Flix 阅读(105) 评论(0) 推荐(0)
摘要:题目描述 输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4。 思路1 可以先将这n个整数升序排序,然后输出前k个数字即可。下面的代码使用快速排序: 该算法的时间复杂度为O(nlogk),为3个算法中时间复杂度最低的。该算法无需对数 阅读全文
posted @ 2020-03-16 21:15 Flix 阅读(141) 评论(0) 推荐(0)
摘要:题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。 思路1 假如数组是排好序的并且存在超过长度(假设为n)一半的数字,那么这个数字 阅读全文
posted @ 2020-03-16 10:56 Flix 阅读(149) 评论(0) 推荐(0)
摘要:题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 牛客网输入:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 注:牛客网的输入可能有字符重复 阅读全文
posted @ 2020-03-15 21:13 Flix 阅读(125) 评论(0) 推荐(0)
摘要:题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节 阅读全文
posted @ 2020-03-13 21:48 Flix 阅读(116) 评论(0) 推荐(0)
摘要:题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 思路 可以将该问题的求解分为3步: 1、对于原始链表中的每个节点复制该节点 阅读全文
posted @ 2020-03-12 17:05 Flix 阅读(163) 评论(0) 推荐(0)
摘要:题目描述 输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)。 思路 使用dfs和回溯。当遍历到某一结点时,记录当前路径的长度:如果当前长度小于期待 阅读全文
posted @ 2020-03-12 11:34 Flix 阅读(127) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。 思路 二叉排序树:左子树的节点值均小于根结点,右子树的节点值均大于根结点;或者是一棵空树。二叉排序树的后序遍历序列的最后一个值为根结点的值,根据根结点 阅读全文
posted @ 2020-03-12 10:54 Flix 阅读(125) 评论(0) 推荐(0)
摘要:题目描述1 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 思路 二叉树的层次遍历(bfs),使用队列求解,代码如下: 阅读全文
posted @ 2020-03-11 23:28 Flix 阅读(124) 评论(0) 推荐(0)
摘要:题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长 阅读全文
posted @ 2020-03-11 23:11 Flix 阅读(121) 评论(0) 推荐(0)
摘要:题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。 思路 一个比较自然的思路就是定义一个变量保存最小元素,当调用min()的时候返回该元素即可。但是 阅读全文
posted @ 2020-03-11 22:30 Flix 阅读(107) 评论(0) 推荐(0)
摘要:题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 思路 将矩阵按照从外向里以顺时针的顺序依次打印出每一个数字,就是从外向里一圈一圈地打印数字。例如,对上面的矩阵来说,矩阵形状为4x4,共打印2圈:第一圈起始于坐标(0,0),值为1;第二圈起始于坐标(1,1),值为6. 对一个 阅读全文
posted @ 2020-03-11 21:56 Flix 阅读(118) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。 思路 前序遍历的顺序是根结点、左子节点、右子结点。把顺序为根结点、右子结点、左子节点的遍历称为“反前序遍历”。如果一棵树的前序遍历序列和反前序遍历序列相同,那么这棵树就是对称的。 阅读全文
posted @ 2020-03-10 22:55 Flix 阅读(114) 评论(0) 推荐(0)
摘要:题目描述 操作给定的二叉树,将其变换为源二叉树的镜像。 思路 将二叉树的每个子树的左右节点交换位置就可以得到二叉树的镜像,由于每一层的树操作都是一样的,所以使用递归求解。 代码如下: 阅读全文
posted @ 2020-03-10 22:23 Flix 阅读(140) 评论(0) 推荐(0)
摘要:问题描述 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 思路 首先判断A和B的根是否相同,如果不同的话,将A的左子树和右子树再与B做判断;如果相同的话,则判断子树是否相同:比较每个节点,有一个不相同则不相同。代码如下: 阅读全文
posted @ 2020-03-09 21:54 Flix 阅读(155) 评论(0) 推荐(0)
摘要:题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。 思路1 可以使用循环来做。首先要确定合并后链表的头。如果第一个链表为空,则合并后的链表就是第二个链表;同样地,如果第二个链表为空,则合并后的链表就是第一个链表;如果两个链表均不为空,则合并后的链表 阅读全文
posted @ 2020-03-09 21:27 Flix 阅读(121) 评论(0) 推荐(0)
摘要:题目描述 输入一个链表,反转链表后,输出新链表的表头。 思路 一个比较经典的题目。要维护3个指针:当前结点的指针curNode、当前结点的前一个结点的指针preNode和当前结点的下一个结点的指针nextNode。首先使用nextNode保存curNode的下一个结点地址,不然链表会断掉,然后将cu 阅读全文
posted @ 2020-03-09 20:34 Flix 阅读(113) 评论(0) 推荐(0)
摘要:题目描述 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 思路1 首先要判断链表中有没有环:可以利用两个指针,初始都在head,一个指针移动的比较快(一次移动两个节点),另一个指针移动的比较慢(一次移动一个节点),如果两个节点最终相遇了,则说明链表中存在环;如果快指针的下 阅读全文
posted @ 2020-03-09 17:37 Flix 阅读(123) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。 注:这个题在书中没有要求奇数和奇数,偶数和偶数之间的相对位置不变。 思路1 遍历整个数组,当遇到偶数时,将该偶数后面的数 阅读全文
posted @ 2020-03-09 12:25 Flix 阅读(118) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2"," 123","3.1416"和" 1E 16"都表示数值。 但是"12e","1a3.14","1.2.3","+ 5"和"12e+4.3"都不是。 思路 最复杂的数值表示 123.456e 阅读全文
posted @ 2020-03-08 23:25 Flix 阅读(140) 评论(0) 推荐(0)
摘要:题目描述 请实现一个函数用来匹配包括'.'和'\ '的正则表达式。模式中的字符'.'表示任意一个字符,而'\ '表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab\ ac\ a"匹配,但是与"aa.a"和"ab 阅读全文
posted @ 2020-03-08 22:50 Flix 阅读(148) 评论(0) 推荐(0)
摘要:题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0,同时不需要考虑大数问题(不会溢出)。 思路1 因为不会溢出,可以直接使用循环相乘来求解。当指数(exponent)为整数时,直接返回结果; 阅读全文
posted @ 2020-03-07 22:16 Flix 阅读(159) 评论(0) 推荐(0)
摘要:题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路1 可以先判断该整数对应的二进制最右一位是不是1,判断方法为将整数的二进制和1做与运算(&),如果整数二进制的最右一位是1,则与运算结果为1,否则为0。将整数二进制最右一位进行判断后右移一位( ),直至整数为0。但这种方 阅读全文
posted @ 2020-03-07 21:41 Flix 阅读(213) 评论(0) 推荐(0)
摘要:问题描述 给你一根长度为n的绳子,请把绳子剪成整数长的m段(m、n都是整数,n 1并且m 1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是 阅读全文
posted @ 2020-03-03 22:56 Flix 阅读(209) 评论(0) 推荐(0)