自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 二叉搜索树的后序遍历序列——剑指Offer

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目分析二叉搜索树如下图:结合图中分析,BST满足两个条件:一棵 BST :左孩子 < 根结点 < 右孩子一棵 BST 的左子树或者右子树都是 BST后序遍历是,左右根:[3, 4, 9, 5, 12, 11, 1...

2020-03-30 21:45:19 111

原创 从上往下打印二叉树——剑指Offer

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。题目分析二叉树的层次遍历其实是属于BFS,我们可以借助一个队列来实现。步骤如下:根节点入队列队列最前节点的左节点不为空,左节点入队列队列最前节点的右节点不为空,右节点入队列弹出一个节点重复2直到队列空代码C++代码如下:/*struct TreeNode { int val; struct TreeNo...

2020-03-29 19:01:02 88

原创 LeetCode 347——前k个高频元素

题目描述给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入:nums = [1,1,1,2,2,3], k = 2输出:[1,2]示例 2:输入:nums = [1], k = 1输出:[1]说明:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于 O(n log n) , n 是数组的大小...

2020-03-24 00:46:26 85

原创 LeetCode215——数组中第k个最大元素

题目描述在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。示例 1:输入:[3,2,1,5,6,4] 和 k = 2输出:5示例 2:输入:[3,2,3,1,2,4,5,5,6] 和 k = 4输出:4说明:你可以假设 k 总是有效的,且 1 ≤ k ≤ 数组的长度。题目分析遇到求第k个数,我们...

2020-03-24 00:04:24 72

原创 LeetCode239——滑动窗口最大值

题目描述给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例输入:nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出:[3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] ...

2020-03-23 21:34:30 143

原创 LeetCode230——二叉搜索树中第k小的元素

题目描述给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。示例 1:输入:root = [3,1,4,null,2], k = 13/ 1 42输出:1示例 2:输入:root = [5,3,6,2,4,null,null,1], k = 35/ ...

2020-03-23 21:24:40 66

原创 输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。

题目描述输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。输入They are studentsaeiou输出Thy r stdnts题目分析这个就是在一个字符串a中查找另一个字符串b中的字母出现的下标,存储在vector中,并通过vector的iterator来查找下标,若在字符串a中没有,才将字母添加到新的字符串中。代码C++代码如下:#include<a...

2020-03-22 23:00:14 1079

原创 栈的压入、弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)题目分析新建一个栈,将数组A压入栈中,当栈顶元素等于数组B时,就将其出栈,当循环结束...

2020-03-22 10:38:42 115

原创 包含min函数的栈——剑指Offer

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。题目分析主要思想是使用两个栈,栈total用来存放栈中的所有元素,栈min用来存放栈中元素的最小值,每一个进栈的元素都与栈min的栈顶元素进行比较,若是比栈顶元素小,则入栈;否则,栈min的栈顶...

2020-03-21 10:13:20 65

原创 顺时针打印数字矩阵——哔哩哔哩2019秋招编程题

题目描述给定一个数字矩阵,请设计一个算法从左上角开始顺时针打印矩阵元素输入描述输入第一行是两个数字,分别代表行数M和列数N;接下来是M行,每行N个数字,表示这个矩阵的所有元素;当读到M=-1,N=-1时,输入终止。输出描述请按逗号分割顺时针打印矩阵元素(注意最后一个元素末尾不要有逗号!例如输出“1,2,3”,而不是“1,2,3,”),每个矩阵输出完成后记得换行示例输入3 31 ...

2020-03-20 14:52:44 269

原创 顺时针打印矩阵——剑指Offer

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.题目分析这个非常像走迷宫的问题,就是顺时针沿着矩阵的边沿,一步步地走到矩...

2020-03-20 12:07:32 87

原创 二叉树的镜像——剑指Offer

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述二叉树的镜像定义:源二叉树8/ 6 10/ \ / 5 7 9 11输入描述 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5题目分析这个题主要有两种解法:第一种是用递归的方法,交换左右子树的位置,然后逐层向下递归。第二种是采用非递归的方法,用...

2020-03-19 11:40:55 93

原创 树的子结构——剑指Offer

题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)题目分析如下图所示,图示黄色部分是子树,而灰色部分是子结构。详情请看代码注释:代码Java代码如下:/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = nu...

2020-03-18 21:44:49 70

原创 LRU Cache——携程2019届秋招专业笔试(研发方向)

题目描述设计一个数据结构,实现LRU Cache的功能(Least Recently Used – 最近最少使用缓存)。它支持如下2个操作: get 和 put。int get(int key) – 如果key已存在,则返回key对应的值value(始终大于0);如果key不存在,则返回-1。void put(int key, int value) – 如果key不存在,将value插入;如...

2020-03-17 16:56:29 446

原创 合并两个排序的链表——剑指Offer

题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。题目分析这个题的思路就是创建一个新的链表,然后比较之前两个链表元素的大小,小的元素插入到新的链表中,直到其中一个链表的元素遍历完。最后在末尾插入那个没遍历完的链表。代码Java代码如下:/*public class ListNode { int val; ListNod...

2020-03-17 10:56:54 72

原创 LeetCode 25:每k个一组反转链表——小红书2019校园招聘技术类笔试题

题目描述给出一个链表,每 k 个节点一组进行翻转,并返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么将最后剩余节点保持原有顺序。说明:你需要自行定义链表结构,将输入的数据保存到你的链表中;你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换;你的算法只能使用常数的额外空间。输入描述第一行输入是链表的值第二行输入是K的值...

2020-03-16 17:05:19 214

原创 反转链表——剑指Offer

题目描述输入一个链表,反转链表后,输出新链表的表头。题目分析详情请看代码。代码Java代码如下:/*public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; }}*/public class Solution...

2020-03-16 11:24:06 67

原创 单链表的逆转——欢聚时代2017校招笔试

题目描述实现单链表的逆转函数,输入一个链表,反转链表后,返回翻转之后的链表。题目分析这个就是链表反转的不同题目。代码Java代码如下:/*只需要完成逆置链表函数public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val;...

2020-03-15 17:02:55 107

原创 链表中倒数第k个结点——剑指Offer

题目描述输入一个链表,输出该链表中倒数第k个结点。题目分析这道题采用的是快慢指针的方法,通过两个指针的移动,快指针比慢指针领先k个位置,这样当快指针到达链表尾部的时候,慢指针就刚好到达了倒数第k个位置,详情请见代码注释。代码Java代码如下:/*public class ListNode { int val; ListNode next = null; Li...

2020-03-15 12:50:13 95

原创 数组操作——小米2019秋招测试开发笔试题(A)

题目描述输入一个无序整数数组,调整数组中数字的顺序, 所有偶数位于数组的前半部分,使得所有奇数位于数组的后半部分。要求时间复杂度为O(n)。输入描述给定无序数组。长度不超过1000000。输出描述所有偶数位于数组的前半部分,所有奇数位于数组的后半部分。如果有多个答案可以输出任意一个正确答案。示例输入2 4 5 7 8 1输出2 4 8 7 5 1备注请自觉使用O(n)...

2020-03-14 16:12:24 366

原创 调整数组顺序使奇数位于偶数前面——剑指Offer

题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。题目分析这个题主要是运用快排的思想,通过两个数组下标的移动来实现的。详情如图所示,网上的大佬作出的图很形象:代码Java代码如下:class Solution {public: void reOrde...

2020-03-14 12:27:38 74

原创 找出数字元素的下标——欢聚时代2017校招笔试题目

题目描述读入一个有n个数的整形数组,并给出一个和值sum,判断是否存在两个数字使得它们的和为sum。输入描述输入数据包括两行:第一行两个整数n(1 ≤ n ≤ 1000),sum(1 ≤ sum ≤ 10 ^ 9)第二行n个整数,范围均在32位整数内,以空格分隔输出描述如果找到和值为某值的两个数,输出两个数字的下标(数组下标从0开始),如果有多解,输出第一个数下标最小的那个解;否则输...

2020-03-13 16:57:31 124

原创 字符串加法——唯品会2019秋招开发B类

题目描述输入两个字符串a和b,字符串内容为二进制数字,求两个字符串相加的结果,加法计算方法以二进制方式计算,并返回对应的字符串结果。要求程序尽可能的高效。示例如下:/**@param a = “1101”@param b = “1100”@return “11001”*/public String add(String a, String b){}输入描述输入两...

2020-03-13 16:31:50 106

原创 数值的整数次方——剑指Offer

题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0题目分析这个题目要注意的点是base是double型的数据,而exponent是int型的数据。同时要学会使用三目运算符,这样可以提升代码的整洁度。代码Java代码如下:public class Solution { ...

2020-03-13 15:34:35 57

原创 二进制中1的个数——剑指Offer

题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。题目分析通过看大佬的题解,思路一下子清晰了起来。输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。(搬运评论区大佬的解释)如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余...

2020-03-12 19:46:48 69

原创 画家小Q——腾讯2018春招技术类编程题

题目描述画家小Q又开始他的艺术创作。小Q拿出了一块有NxM像素格的画板, 画板初始状态是空白的,用’X’表示。小Q有他独特的绘画技巧,每次小Q会选择一条斜线, 如果斜线的方向形如’/’,即斜率为1,小Q会选择这条斜线中的一段格子,都涂画为蓝色,用’B’表示;如果对角线的方向形如’’,即斜率为-1,小Q会选择这条斜线中的一段格子,都涂画为黄色,用’Y’表示。如果一个格子既被蓝色涂画过又被黄色涂...

2020-03-12 19:31:28 163

原创 矩形覆盖——剑指Offer

题目描述我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法:题目分析其实这是一个递归的问题,覆盖可以分为两种情况,一种是横着覆盖,另一种是竖着覆盖。在求2*n的覆盖方式时,我们只需要考虑这两种情况。当n=1时,只能竖着覆盖,f(1)=1;当n=2时,既可以横着覆盖,也可...

2020-03-11 17:57:08 80

原创 跳石板——网易2017秋招编程题

题目描述小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3…这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。例如:N = 4,M = 24:4->6-&g...

2020-03-10 19:19:38 166

原创 变态跳台阶——剑指Offer

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目分析这个青蛙跳台阶是普通青蛙跳台阶的升级版,遇到这类问题,我们都要列出递推公式:f(n)=f(n-1)+f(n-2)+……f(1)f(n-1)=f(n-2)+……f(1)两式相减得f(n)=2*f(n-1)代码由于代码中采用的左移一位的操作相当于原有的数乘以2...

2020-03-10 17:54:48 77

原创 跳台阶——剑指Offer

题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。题目分析其实这个题目的解法和斐波那契数列有着异曲同工之妙,青蛙到达目标台阶的方式可以分为两种,一种是最后一下跳1级上去的,另一种是最后一下跳2级上去的。用这样的想法不断地回溯就会找到思路。代码1.递归法public class Solution { pu...

2020-03-09 20:50:25 71

原创 斐波那契数列——剑指Offer

题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39题目分析斐波那契的标准公式:斐波那契数列的标准公式为:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)n>=3,n∈N*其实斐波那契数列的问题有多种解法,大家最常见就是递归的版本了,不过这次在递归版本的基础上总结了一些其他的方法。(Ja...

2020-03-08 18:48:50 161

原创 查找第K大的元素——有赞2019校招Java笔试(B卷)

题目描述对于一个给定的正整数组成的数组 a[] ,如果将 a 倒序后数字的排列与 a 完全相同,我们称这个数组为“回文”的。例如, [1, 2, 3, 2, 1] 的倒序是他自己,所以是一个回文的数组;而 [1, 2, 3, 1, 2] 的倒序是 [2, 1, 3, 2, 1] ,所以不是一个回文的数组。对于任意一个正整数数组,如果我们向其中某些特定的位置插入一些正整数,那么我们总是能构造出...

2020-03-07 18:59:03 128

原创 旋转数组中的最小元素——小米2019秋招开发测试笔试题(B)

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。输入描述一个排好序的数组的一个旋转数组长度不超过1000000输出描述该数组的最小值示例输入3 4 5 1 2输出1题目分析这题不推荐使用暴力...

2020-03-07 17:17:12 95

原创 旋转数组的最小数字——剑指Offer

题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。题目解析这个的核心是二分查找,通过比较low,mid,high位上的大小从而不断地缩小范围。主要分三种情况:...

2020-03-07 17:05:39 77

原创 队列最小修改——京东2019春招京东开发类试题

题目描述已知一个奇怪的队列,这个队列中有n个数,初始状态时,顺序是1,2,3,4,…n,是1-n按顺序排列。这个队列只支持一种操作,就是把队列中的第i号元素提前到队首(1<i<=n),如有4个元素,初始为1,2,3,4,可以将3提前到队首,得到3,1,2,4 。 现在给出一个经过若干次操作之后的序列,请你找出这个序列至少是由原序列操作了多少次得到的。输入描述第一行是一个整数n(...

2020-03-06 18:06:24 328

原创 构造队列——网易有道2017内推编程题

题目描述小明同学把1到n这n个数字按照一定的顺序放入了一个队列Q中。现在他对队列Q执行了如下程序:while(!Q.empty()) //队列不空,执行循环{int x=Q.front(); //取出当前队头的值xQ.pop(); //弹出当前队头Q.push(x); //把...

2020-03-06 17:48:02 188

原创 最小栈——Momenta2019秋招技术岗笔试题

题目描述实现一个最小栈,有三种操作,min:得到栈中的最小值,push:在栈顶插入一个元素,pop:弹出栈顶元素,使这三种操作的时间复杂度都是O(1)要求:语言不限输入描述第一行是一个数Q,接下来Q行每行表示一个操作,每行首先是操作op若op=0,则输出当前栈中的最小值;若op=1,表示push,接着正整数x,把在x放进栈顶;若op=2,表示pop,弹出栈顶元素保证Q<=50...

2020-03-06 17:07:41 286

原创 用两个栈实现队列——剑指Offer

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。题目分析我们先要明确栈和队列的特点,栈最大的特点是先进后出,队列最大的特点是先进先出,因此如何用两个栈来构建一个队列能,我们可以通过下面的例子来分析一下。我们向模拟的队列插入数 a,b,c 时,假设先把数全部插入 stack1,此时的栈情况为:栈 stack1:{a,b,c}栈 stack2:{...

2020-03-06 16:29:23 195

原创 二叉树后序遍历——欢聚时代2017校招笔试

题目描述给定一个二叉树的前序遍历和中序遍历的序列,输出对应这个二叉树的后续遍历序列。输入描述输入为一行。 两个字符串,分别表示二叉树的前序遍历和中序遍历结果,用空格分隔,保证数据合法。输出描述对应输出后序遍历序列示例输入ABDEC DBEAC输出DEBCA题目解析我们可以先通过先序序列和中序序列来构建出整个二叉树,然后再对整个二叉树进行后序遍历。代码import jav...

2020-03-05 19:16:39 109

原创 重建二叉树——剑指Offer

题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。题目解析这个题主要是已知二叉树的先序(又叫前序)遍历和中序遍历,根据这两个遍历来构建出整个二叉树,遇到二叉树的遍历问题,我首先想到的是利用递归的方法。...

2020-03-05 17:51:02 79

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除