自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 剑指Offer题解(Java持续更新)

题目二维数组中的查找替换空格从尾到头打印链表重建二叉树

2021-05-29 21:53:37 78

原创 牛客每日一题系列(持续更新)

题目奇数位上都是奇数位或偶数位上都是偶数位有假币最难的问题因子个数

2021-05-22 21:10:44 170 1

原创 从上往下打印二叉树(Java)

牛客链接从上往下打印二叉树题目从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路用队列queue实现。list用来保存遍历的值,queue用来遍历层次遍历二叉树。先将root存入queue如果queue不为空,就将当前节点值存入list,并将此节点抛掉然后依次遍历左节点和右节点,若不为空,则说明有值,就将节点存入queue直到queue为空为止,list内的值就是所求代码实现import java.util.ArrayList;import java.util.Qu

2021-06-19 17:59:32 161

原创 栈的压入、弹出序列(Java)

牛客链接栈的压入、弹出序列题目输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路用辅助栈实现。将入栈的数组入栈后,判断出栈顺序的当前数字是否为入栈数组的当前数字,如果是则进行出栈,直到不是当前数字为止。将所有数字循环入栈后都进行了出栈判

2021-06-19 17:52:46 170

原创 数组中出现次数超过一半的数字(Java)

牛客链接数组中出现次数超过一半的数字题目数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。你可以假设数组是非空的,并且给定的数组总是存在多数元素。1<=数组长度<=50000解题思路方法一为排序,排序后取中间值即可(此数字大于数组长度的一半,若有则一定是排序后的中间值)。方法二为遍历,记录数字出现的次数,记录出现次数的最大值,和数组的长度一半

2021-06-10 21:11:32 642

原创 包含min函数的栈(Java)

牛客链接包含min函数的栈题目定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路两个栈,一个正常的存储栈,一个最小栈。最小栈存储时用传入的值和栈顶元素(最小值)进行比较,如果比栈顶元素小或者相等,则直接入最下栈,否则再次存一次栈顶元素(保持两个栈元素数量相同的同时保证最小栈的栈顶元素是最小值,这样pop的时候可以同时pop的同时保证最小栈的栈顶还是正常存储栈的最小值)代码实现import java.util.Stack;p

2021-06-10 21:02:47 149

原创 顺时针打印矩阵(Java)

牛客链接顺时针打印矩阵题目输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.解题思路记录上下左右的边界,按照顺时针每往list添加一行或一列元素,对应的边界进行变化,直到一个边界超过相对的另一个边界为止,返回list即可,代码实现import java.util.Arra

2021-06-09 22:43:18 1001

原创 乒乓球筐(Java)

牛客链接乒乓球筐题目nowcoder有两盒(A、B)乒乓球,有红双喜的、有亚力亚的……现在他需要判别A盒是否包含了B盒中所有的种类,并且每种球的数量不少于B盒中的数量,该怎么办呢?输入描述输入有多组数据。每组数据包含两个字符串A、B,代表A盒与B盒中的乒乓球,每个乒乓球用一个大写字母表示,即相同类型的乒乓球为相同的大写字母。字符串长度不大于10000。输出描述每一组输入对应一行输出:如果B盒中所有球的类型在A中都有,并且每种球的数量都不大于A,则输出“Yes”;否则输出“No”。

2021-06-09 22:11:42 146

原创 二叉树的镜像(Java)

牛客链接二叉树的镜像题目操作给定的二叉树,将其变换为源二叉树的镜像。解题思路从上到下遍历二叉树,将二叉树的左右孩子节点交换即可。代码实现 public TreeNode Mirror (TreeNode pRoot) { // write code here if(pRoot == null) return null; TreeNode temp = pRoot.left; pRoot.left = pRoot.rig

2021-06-08 21:27:07 56

原创 单词倒排(Java)

牛客链接单词倒排题目对字符串中的所有单词进行倒排。说明:1、构成单词的字符只有26个大写或小写英文字母;2、非构成单词的字符均视为单词间隔符;3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;4、每个单词最长20个字母;输入描述输入一行以空格来分隔的句子输出描述输出句子的逆序解题思路需要用到正则表达式:[^a-zA-Z] (去匹配目标字符串中非a—z也非A—Z的字符)所以将字符串用split以正则表

2021-06-08 21:23:57 575

原创 骆驼命名法(Java)

牛客链接骆驼命名法题目从C/C++转到Java的程序员,一开始最不习惯的就是变量命名方式的改变。C语言风格使用下划线分隔多个单词,例如“hello_world”;而Java则采用一种叫骆驼命名法的规则:除首个单词以外,所有单词的首字母大写,例如“helloWorld”。请你帮可怜的程序员们自动转换变量名。输入描述输入包含多组数据。每组数据一行,包含一个C语言风格的变量名。每个变量名长度不超过100。输出描述对应每一组数据,输出变量名相应的骆驼命名法。解题思路将字符串用split

2021-06-08 21:20:11 500

原创 树的子结构(Java)

牛客链接树的子结构题目输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)解题思路什么是子结构?在看牛客时概念有些混乱,子树和子结构是不同的。子结构可以是原树的任意一个节点的结构相同即可(B树在A树种出现即可)。什么是子树呢?子树代表这棵二叉树必须是原树的本树或左子树或右子树(B树必须是A树的左子树,右子树,或者和A树相同)思路可以看到,本题是要求B树是A树的子结构而非子树,那么,只要B树存在于A中即可,需要遍历A全部节点,而不仅仅是根节点和根

2021-06-07 21:27:51 157

原创 合并两个排序的链表(Java)

牛客链接合并两个排序的链表题目输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。解题思路先比较list1和list2的头结点大小,先记录下来,这就是要返回的头结点。然后根据list1和list2各个节点的大小比较,谁小就让当前节点cur的next指向哪个节点,然后让cur向后移动继续去寻找下一个节点,循环结束即可。代码实现public class Solution { public ListNode Merge(ListNode lis

2021-06-06 20:37:22 110

原创 反转链表(Java)

牛客链接反转链表题目输入一个链表,反转链表后,输出新链表的表头。解题思路head为头结点,也是操作时的当前节点。pre记录当前节点的前一个节点但是如果直接将head指向pre,怎么指向后面的节点进行后面节点的反转呢?所以需要再定义一个记录当前节点的下一个节点的节点temp,这样让head指向pre后,就可以通过让pre到head的位置,head到记录的temp的位置,继续下一个点的反转了,直至当前节点head为空时,说明所有节点已经反转完了,返回反转后的头结点pre即可。代码实现p

2021-06-05 22:15:15 54

原创 解读密码(Java)

牛客链接解读密码题目nowcoder要和朋友交流一些敏感的信息,例如他的电话号码等。因此他要对这些敏感信息进行混淆,比如在数字中间掺入一些额外的符号,让它看起来像一堆乱码。现在请你帮忙开发一款程序,解析从nowcoder那儿接收到的信息,读取出中间有用的信息。输入描述输入有多行。每一行有一段经过加密的信息(其中可能包含空格),并且原始信息长度不确定。输出描述输出每段信息中数字信息。解题思路遍历字符串,是数字就输出(charAt >= ’ 0 ’ && ch

2021-06-04 21:34:13 216

原创 链表中倒数第k个结点(Java)

牛客链接链表中倒数第k个结点题目输入一个链表,输出该链表中倒数第k个结点。如果该链表长度小于k,请返回空。解题思路用双指针即可,倒数第k个,其实就是正数n-k+1个。先让快指针走k步,然后slow从head出发,跟fast一步一步走,当fast走到尾(空节点)时,slow的位置正在n-k+1。代码实现import java.util.*;/* * public class ListNode { * int val; * ListNode next = null; *

2021-06-04 21:30:31 88

原创 Emacs计算器(Java)

牛客链接Emacs计算器题目Emacs号称神的编辑器,它自带了一个计算器。与其他计算器不同,它是基于后缀表达式的,即运算符在操作数的后面。例如“2 3 +”等价于中缀表达式的“2 + 3”。请你实现一个后缀表达式的计算器。输入描述输入包含多组数据。每组数据包括两行:第一行是一个正整数n (3≤n≤50);紧接着第二行包含n个由数值和运算符组成的列表。“±*/”分别为加减乘除四则运算,其中除法为整除,即“5/3=1”。输出描述对应每一组数据,输出它们的运算结果。解题思路根据挨个

2021-06-03 22:16:29 314

原创 调整数组顺序使奇数位于偶数前面

牛客链接调整数组顺序使奇数位于偶数前面题目输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。解题思路遍历两边数组,第一遍将奇数放入数组,第二遍将偶数放入数组即可。代码实现import java.util.*;public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可

2021-06-03 22:10:29 42

原创 发邮件(错排算法)

牛客链接发邮件题目NowCoder每天要给很多人发邮件。有一天他发现发错了邮件,把发给A的邮件发给了B,把发给B的邮件发给了A。于是他就思考,要给n个人发邮件,在每个人仅收到1封邮件的情况下,有多少种情况是所有人都收到了错误的邮件?即没有人收到属于自己的邮件。输入描述输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述对应每一组数据,输出一个正整数,表示无人收到自己邮件的种数。解题思路错排算法代码实现import java.util.Scanner;pub

2021-06-02 21:30:05 142

原创 数值的整数次方(Java)

牛客链接数值的整数次方题目给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。不得使用库函数,同时不需要考虑大数问题,也不用考虑小数点后面0的位数。解题思路分析所有情况进行输出。如果base == 0,那么直接返回0即可。如果exponent == 0,返回1。如果exponent < 0,base = 1/base,exponent = - exponent(底数变为正值,但结果

2021-06-02 21:26:38 352

原创 二进制中1的个数(Java)

牛客链接二进制中1的个数题目输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。解题思路如果一个数 -1 ,二进制中的表示为最右边的一个1变为0,后面的所有0变为1。例如12(1100)减去1,则变为11(1011),转变过程为:1100 -> 1000(先将最右边的1变为0) -> 1011(再将后面的0变为1)此时将当前的值,与减去1后的值按位与(1100&1011) 就得到了1000(相当于已经计算了一个1,让count++) 重复上述步骤 直

2021-06-01 18:18:59 350

原创 矩形覆盖(Java)

牛客链接矩形覆盖题目我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,从同一个方向看总共有多少种不同的方法?解题思路斐波那契借用牛客评论的图理解代码实现public class Solution { public int rectCover(int target) { if(target == 0) return 0; if(target == 1 || target == 2) {

2021-06-01 18:11:52 99

原创 变态跳台阶(Java)

牛客链接跳台阶扩展问题(变态跳台阶)题目一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。解题思路我们先分析一下题中的意思。如果有一层台阶,那么跳法有f(1) = 1 种如果有两层台阶,那么跳法有f(2) = f(2-1) +1 种如果有三层台阶,那么跳法有f(3) = f(3-1) + f(3-2) +1种如果有四层台阶,那么跳法有f(4) = f(4-1) + f(4-2) +f(4-3) +1种…如果有n-1层台阶,

2021-05-31 20:27:09 90

原创 青蛙跳台阶(Java)

牛客链接跳台阶题目一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。解题思路有n层台阶。如果青蛙跳法为1阶跳法,那么剩下的n-1个台阶的跳法为f(n-1)如果青蛙跳法为2阶跳法,那么剩下的n-2个台阶的跳法为f(n-2)f(n) = f(n-1) + f(n-2) 递归即可。代码实现public class Solution { public int jumpFloor(int target) {

2021-05-31 20:09:01 92

原创 斐波那契数列(Java)

牛客链接斐波那契数列题目大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。n≤39解题思路递归会超时,循环即可。代码实现public class Solution { public int Fibonacci(int n) { if(n==0) return 0; int s = 0; int m = 1; int result = m+s;

2021-05-31 20:05:56 123

原创 旋转数组的最小数字(Java)

牛客链接旋转数组的最小数字题目把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。解题思路二分法。能用二分法是因为本题有明确的大小界限。旋转之前的数组是从小到大排序的。取最左边的值为left,取最右边的值为right,那么right一定小于left。(从最初的左边移到右边,肯定是比留在左边的数要小的)取中间值:mid = left + (right -

2021-05-31 19:02:45 154

原创 用两个栈实现队列(Java)

牛客链接用两个栈实现队列题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解题思路栈stack1用来实现push操作,stack2空的前提下才能进行入栈,否则影响后续进出队列的顺序。栈stack2用来实现pop操作,将push进去的stack1内的元素存入stack2中,再进行出栈,就是队列的出列顺序。代码实现import java.util.Stack;public class Solution { Stack<Integer&

2021-05-30 22:03:17 787

原创 数据库连接池(Java)

牛客链接数据库连接池题目Web系统通常会频繁地访问数据库,如果每次访问都创建新连接,性能会很差。为了提高性能,架构师决定复用已经创建的连接。当收到请求,并且连接池中没有剩余可用的连接时,系统会创建一个新连接,当请求处理完成时该连接会被放入连接池中,供后续请求使用现在提供你处理请求的日志,请你分析一下连接池最多需要创建多少个连接输入描述输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤1000),表示请求的数量紧接着n行,每行包含一个请求编号id(A、B、C……、Z)和操作(conn

2021-05-30 21:47:12 121

原创 mkdir(Java)

牛客链接mdir题目工作中,每当要部署一台新机器的时候,就意味着有一堆目录需要创建。例如要创建目录“/usr/local/bin”,就需要此次创建“/usr”、“/usr/local”以及“/usr/local/bin”。好在,Linux下mkdir提供了强大的“-p”选项,只要一条命令“mkdir -p /usr/local/bin”就能自动创建需要的上级目录。现在给你一些需要创建的文件夹目录,请你帮忙生成相应的“mkdir -p”命令。输入描述输入包含多组数据。每组数据第一行为一个正整

2021-05-30 21:38:57 987

原创 重建二叉树(Java)

牛客链接重建二叉树题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。解题思路前序遍历的顺序:根节点,左节点,右节点。可知整棵树的根节点是前序序列的第一个值pre[0]中序遍历的顺序:左节点,根节点,右节点。那么就可以根据前序遍历得到的根节点,在中序序列中查找,左边即使左树,右边即使右树。递归分别构建左树

2021-05-29 21:50:25 197

原创 从尾到头打印链表(Java)

牛客链接从尾到头打印链表题目输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解题思路递归,一直打印链表的next(下一个值),直到链表为null开始返回,将值val添加到list中。代码实现/*** public class ListNode {* int val;* ListNode next = null;** ListNode(int val) {* this.val = val;*

2021-05-29 21:45:27 91

原创 替换空格(Java)

牛客链接替换空格题目请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思路思路一:Java中有直接替换字符串中固定字符串的函数replaceAll( ),调用即可。思路二:用split以空格分隔字符串存入字符串数组中,再拼接起来,每次拼接中多拼接%20即可。代码实现import java.util.*;public class Solution { pub

2021-05-29 21:41:46 382

原创 二维数组中的查找(Java)

牛客链接二维数组中的查找题目在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。解题思路从左下角开始对比,如果target比所在位置值大,则向右找,若targe

2021-05-29 21:22:54 245 1

原创 年会抽奖(错排算法)

牛客链接年会抽奖题目今年公司年会的奖品特别给力,但获奖的规矩却很奇葩:首先,所有人员都将一张写有自己名字的字条放入抽奖箱中;待所有字条加入完毕,每人从箱中取一个字条;如果抽到的字条上写的就是自己的名字,那么“恭喜你,中奖了!”现在告诉你参加晚会的人数,请你计算有多少概率会出现无人获奖?输入描述输入包含多组数据,每组数据包含一个正整数n(2≤n≤20)。输出描述对应每一组数据,以“xx.xx%”的格式输出发生无人获奖的概率。错排算法讲解B站讲解解题思路错排算法的实现

2021-05-27 22:35:14 417

原创 收件人列表(Java)

牛客链接收件人列表题目NowCoder每天要给许多客户写电子邮件。正如你所知,如果一封邮件中包含多个收件人,收件人姓名之间会用一个逗号和空格隔开;如果收件人姓名也包含空格或逗号,则姓名需要用双引号包含。现在给你一组收件人姓名,请你帮他生成相应的收件人列表。输入描述输入包含多组数据。每组数据的第一行是一个整数n (1≤n≤128),表示后面有n个姓名。紧接着n行,每一行包含一个收件人的姓名。姓名长度不超过16个字符。输出描述对应每一组输入,输出一行收件人列表。解题思路简单的字符

2021-05-26 21:45:24 543

原创 养兔子(Java)

收件人列表题目一只成熟的兔子每天能产下一胎兔子。每只小兔子的成熟期是一天。 某人领养了一只小兔子,请问第N天以后,他将会得到多少只兔子。输入描述测试数据包括多组,每组一行,为整数n(1≤n≤90)。输出描述对应输出第n天有几只兔子(假设没有兔子死亡现象)。解题思路斐波那契。今天的兔子数量昨天的兔子的数量fib[n-1]加上生的兔子的数量,生的兔子的数量等于前天的兔子的数量fib[n-2](都成熟了具有生育力)。把对应的斐波那契值存到数组里,直接取出来输出即可。代码实现impor

2021-05-26 21:40:02 300

原创 客似云来(Java)

牛客链接客似云来题目NowCoder开了一家早餐店,这家店的客人都有个奇怪的癖好:他们只要来这家店吃过一次早餐,就会每天都过来;并且,所有人在这家店吃了两天早餐后,接下来每天都会带一位新朋友一起来品尝。于是,这家店的客人从最初一个人发展成浩浩荡荡成百上千人:1、1、2、3、5……现在,NowCoder想请你帮忙统计一下,某一段时间范围那他总共卖出多少份早餐(假设每位客人只吃一份早餐)。输入描述测试数据包括多组。每组数据包含两个整数from和to(1≤from≤to≤80),分别代表开店的

2021-05-25 20:07:46 305

原创 剪花布条(Java)

牛客链接剪花布条题目一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案。对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢?输入描述输入包含多组数据。每组数据包含两个字符串s,t,分别是成对出现的花布条和小饰条,其布条都是用可见ASCII字符表示的,可见的ASCII字符有多少个,布条的花纹也有多少种花样。花纹条和小饰条不会超过1000个字符长。输出描述对应每组输入,输出能从花纹布中剪出的最多小饰条个数,如果一块都没有,那就输出0,每个结果占一行。

2021-05-25 20:01:26 355

原创 斐波那契凤尾(Java)

牛客链接斐波那契凤尾题目NowCoder号称自己已经记住了1-100000之间所有的斐波那契数。为了考验他,我们随便出一个数n,让他说出第n个斐波那契数。当然,斐波那契数会很大。因此,如果第n个斐波那契数不到6位,则说出该数;否则只说出最后6位。输入描述输入有多组数据。每组数据一行,包含一个整数n (1≤n≤100000)。输出描述对应每一组输入,输出第n个斐波那契数的最后6位。解题思路按理说求斐波那契数时,不使用递归的算法的复杂度会低,但是在牛客运行后还是会超时,但是如果提前

2021-05-24 20:59:28 221

原创 因子个数(Java)

牛客链接因子个数题目一个正整数可以分解成一个或多个数组的积。例如36=223*3,即包含2和3两个因子。NowCoder最近在研究因子个数的分布规律,现在给出一系列正整数,他希望你开发一个程序输出每个正整数的因子个数。输入描述输入包括多组数据。每组数据仅有一个整数n (2≤n≤100000)。输出描述对应每个整数,输出其因子个数,每个结果占一行。解题思路思路1第一个想到的算法是从i = 2开始循环,用输入的数据num除以 i ,除数用set保存,如果没出现过,则进行count+

2021-05-22 21:04:15 1811

空空如也

空空如也

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

TA关注的人

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