08 2019 档案
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10 为数字本身,A为1, J为11, Q为12,K为13,而大、小王可以看成任意数字。牛客网刷题地址思路分析 将问题转化为 判断5个数字是不是连续的,要注意其中大小王用0代替,最直观的方法是把数组排序。由于0(大小王)可以当成任意数字,我们可以用0去补满数组中的空缺。...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出s的所有可能的值出现的概率。 [牛客网刷题地址]无思路分析递归的方法。要想求出n个骰子的点数和,可以先把n个骰子分为两堆:第一堆只有一个;另一堆有n-1个。单独的那一个有可能出现1~6的点数。我们需要计算1~6的每一种点数和剩下的n-1个骰子来计算点数和。接下来把剩下的n-1...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请定义一个队列并实现函数max得到队列里的最大值,要求函数max、push_back和 pop_front 的时间复杂度都是0(1)。[牛客网刷题地址]无思路分析利用一个双端队列来存储当前队列里的最大值以及之后可能的最大值。在定义题目要求功能的队列时,除了定义一个队列data存储数值,还需额外用一个队列maxmium存储可能的最大值;此外,还...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,2,6,2, 5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,它们的最大值分别为{4,4,6,6,6,5},如下表所示:牛客网刷题地址思路分析 建立一个两端开口的队列,放置所有可能是最大值的数字(存放的其实是对应的下标),且最大值位于队列开头...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2, 该函数将返回左旋转两位得到的结果"cdefgab"。牛客网刷题地址思路分析 首先根据传入的n将字符串分为两部分,分别翻转这两个部分,然后在整体对字符串进行翻转 测试用例功能测试:把长度为n的...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母样处理。例如输入字符串"I am a student. ",则输出"student. a am I"。牛客网刷题地址思路分析 首先将整个字符串翻转,然后在一次翻转单个单词测试用例功能测试:句子中有多个单词;句子中只有一个单词。特殊输入测试:字符串指针...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出3个连续序列1~5、4~6和7~8。牛客网刷题地址思路分析 我们也考虑用两个数small和big分别表示序列的最小值和最大值。首先把small初始化为1, big 初始化为2。如果从small到big...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。 牛客网刷题地址思路分析设置两个指针分别指向数组的头和尾,比较指定的sum和两个指针所指数值之和curSum的大小,如果相等,添加到list中,如果sum FindNumbersWithSum(int [] array...
阅读全文
摘要:一、概述二、Nginx基本安装2.1 Windows安装NginxNginx目录结构2.2 Linux安装Nginx2.3 Mac利用homebrew安装三、nginx启动关闭3.1 重启3.2 关闭一、概述Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 在一个数组中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字[牛客网刷题地址]无思路分析 如果一个数字出现三次,那么它的二进制表示的每一位(0或者1)也出现三次。如果把所有出现三次的数字的二进制表示的每一位都分别加起来,那么每一位的和都能被3整除。我们把数组中所有数字的二进制表示的每一位都加起来。如果某一位的和能被...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 一个整型数组里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是0(1)。牛客网刷题地址思路分析如果将此题改为只有一个数字出现过一次,其他数字出现两次,那么,我们就可以用异或的方式,将所有数字进行异或,最终得到的结果就为只出现过一次的数字,因为重复的数字 异或运算便会各自抵消掉;我...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉树的根节点,判断该树是不是平衡二叉树。如果某二叉树中任意节点的左、右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如,图中的二叉树就是一棵平衡二叉树。牛客网刷题地址思路分析 在求二叉树的深度的过程中判断左右子树之间的高度差,如果高度差大于1 ,就返回-1,说明不是平衡二叉树,否则返回二叉树的深度。测试用例功能测试:平衡的...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点依次经过的节点(含根、叶节点)形成树的一条路径,最长路径的长度为树的深度。牛客网刷题地址思路分析 利用递归,先计算左右子树的深度,判断左子树和右子树深度,大的+1 即为此二叉树的深度。测试用例功能测试:输入普通的二叉树;二叉树中所有节点都没有左/右子树。特殊输入测试:二叉树只有一个节点;...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给定一棵二叉搜索树,请找出其中第k小的节点。例如,在下图的二叉搜索树里,按节点数值大小顺序,第三小节点的值是4。牛客网刷题地址思路分析 二叉树的中序遍历,要注意的地方,要设置一个全局的索引index来记录遍历到第几个元素测试用例功能测试:各种形态不同的二叉搜索树。边界值测试:输入k为0、1、二叉搜索树的节点数、二叉搜索树的节点数加1。特殊...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 假设一个单调递增的数组里的每个元素都是整数并且是唯一的。请编程实现一个函数,找出数组中任意一个数值等于其下标的元素。例如,在数组{-3,-1, 1,3,5}中,数字3和它的下标相等。[牛客网刷题地址] 无思路分析还是二分查找的思路,如果比较mid和其对应下标的关系:如果大于下标,则查找左边部分;如果小于下标,则查找右边部分;如果正好相等,返回...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。[牛客网刷题地址] 无思路分析可以利用数学公式,等差数列公式,先求出0~n-1的和s1,然后再遍历整个数组,将他们的值相加得到s2,然后,所求的值为s1-s2;由于是递增的数组,而且...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 统计一个数字在排序数组中出现的次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。牛客网刷题地址思路分析 利用二分查找法查找到第一个k和最后一个k出现的位置,就可以统计出k出现的次数,比较k与中间值mid的大小:如果k小于mid,则第一个k出现在前半部分,如果k大于mid,则第一个k...
阅读全文
摘要:一、概述二、@WebServlet注解三、共享库/运行时插件2.1 注册Servlet2.2 注册监听器2.3 注册过滤器一、概述Servlet3.0中引入了注解开发二、@WebServlet注解3.0之前要写一个Servlet 需要在web.xml中配置3.0我们可以用注解来替代xml中的配置,可以不需要web.xml,示例代码如下:@WebServlet("/hello")public cla...
阅读全文
摘要:一、概述二、prepareRefresh()三、obtainFreshBeanFactory()四、prepareBeanFactory(beanFactory);五、postProcessBeanFactory(beanFactory);六、invokeBeanFactoryPostProcessors(beanFactory)七、registerBeanPostProcessors(beanF...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入两个链表,找出它们的第一个公共结点。下图中6为公共结点:牛客网刷题地址思路分析 如果两个链表有公共节点,那么公共节点出现在两个链表的尾部。如果我们从两个链表的尾部开始往前比较,那么最后一个相同的节点就是我们要找的节点。解决这个问题:分别把两个链表的节点放入两个栈里,这样两个链表的尾节点就位于两个栈的栈顶,接下来比较两个栈顶的节点是否相...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。例如,在数组{7,5,6,4}中,一共存在5个逆序对,分别是(7, 6)、(7,5)、(7,4)、(6, 4)和(5, 4)。牛客网刷题地址思路分析 利用归并排序的思想:先将数组分解成为n个长度为1的子数组,然后进行两...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。 牛客网刷题地址思路分析 还是将数据存放在Map中,哈希表用数组occurrence实现。数组中的元素occurrence[i]...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'。牛客网刷题地址思路分析可以遍历一遍字符串,将其存在map里面,并统计出现的次数,返回出现次数为1时的位置测试用例功能测试:字符串中存在只出现一次的字符;字符串中不存在只出现一次的字符;字符串中所有字符都只出现一次。特殊输入测试:字符串为nullptr指针。Java代...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 我们把只包含因子2、3和5的数称作丑数( Ugly Number)。求按从小到大的顺序的第1500个丑数。例如,6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当作第一个丑数。牛客网刷题地址思路分析直接求,判断每一个数是否为丑数,时间效率低下创建数组存放已经排序好的丑数,这将消耗一定的内存开销。根据丑数的定义,丑数应该是另一个丑数...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。假设字符串中只包含'a'~'z'的字符。例如,在字符串"arabcacfr"中,最长的不含重复字符的子字符串是"acfr",长度为4。牛客网刷题地址思路分析 动态规划算法。首先定义函数f(i)表示以第i个字符为结尾的不包含重复字符的子字符串的最长长度。我们从左到右...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向左(以自己为视角)或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及其上面的礼物,请计算你最多能拿到多少价值的礼物?  例如,在上面的棋盘中,如果沿着带下画线的数字的线路(1、12、5、7、7、16、5...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给定一个数字,我们按照如下规则把它翻译为字符串: 0翻译成“a”,1翻译成“b”,..... 11翻译成“1”,...... 25翻译成“z”。一个数字可能有多个翻译。例如,12258有5种不同的翻译,分别是“bccfi”“bwfi”、“bczi”、“mcfi”和“mzi”。 请编程实现一个函数,用来计算一个数字有多少种不同的翻译方法。 [...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如,输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323。 牛客网刷题地址思路分析对于数字m和n,可以拼接成mn和nm,如果mn list = new ArrayList(); for(int num : nu...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 数字以0123456789101112131415..的格式序列化到一个字符序列中。在这个序列中,第5位(从0开始计数)是5,第13位是1,第19位是4,等等。请写一个函数,求任意第n位对应的数字。[牛客网刷题地址] 无思路分析数字位数为1时 ,共有10个1位数数字位数为2时 ,共有9*10个2位数数字位数为3时 ,共有9*(10^2)个3位...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个整数n,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12, 1~12这些整数中包含1的数字有1、10、11和12,1一共出现了5次。牛客网刷题地址思路分析 对于整数n,我们将这个整数分为三部分:当前位数字cur,更高位数字high,更低位数字low,如:对于n=21034,当位数是十位时,cur=3,high=210,l...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个整型数组,数组里有正数也有负数。数组中的一个或连续多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。牛客网刷题地址思路分析 动态规划的思想,可总结为如下公式:当以第i个数字结尾的子数组中所有数字的和 0时,则与第i个数字累加就得到以第i个数字结尾的子数组中所有数字的和。测试用例功能测试:从数据流中读出奇数...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。牛客网刷题地址思路分析将插入数据存放在小顶堆和大顶堆中,我们先...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入n个整数,找出其中最小的k个数。例如,输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。牛客网刷题地址思路分析利用Patition函数,将数组分成两部分,判断返回的值是否在第k个位置,如果是,那么前k个数即为所求的数,如果小于k,那么在右边,如果大于k,在左边。利用大顶推,将数组中前k个值放入大顶推中,后面的...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。牛客网刷题地址思路分析 有两种思路:快速排序的思想:数字次数超过一半,可以说明排序之后中间的数字一定是所求的数字,即统计学上的中位数,利用partit...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个字符串,打印出该字符串中字符的所有排列。例如,输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、 bac、bca、cab和cba。 牛客网刷题地址思路分析 将字符串看成两部分,第一部分为第一个位置的字符,第二部分为剩下的字符,那么,要求这个字符串的操作就可以分为两步: 1. 求第一部分可能出现在第...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述请实现两个函数,分别用来序列化和反序列化二叉树。二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。二...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。比如,输入下图中左边的二叉搜索树,则输出转换之后的排序双向链表。  牛客网刷题地址思路分析 利用中序遍历的思想,当我们遍历到根节点时,它的左子树已经转换成一个排序的链表了,并且处在链表中的最后一个节点是当前值最大的一个节点,...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)牛客网刷题地址思路分析第一步,可以将复制原始链表上的每个节点,并链接起来,第二步,设置每个节点的特殊指针,这种思路需要O(n2)的...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。  输入上图二叉树以及22,可以打印出两条路径,[10,12] 和[10,5,7] 牛客网刷题地址思路分析 递归的前序遍历二叉树 ,将沿途路径中的值添加到list中,每次与target相减,当ta...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true, 否则返回false. 假设输入的数组的任意两个数字都互不相同。例如,输入数组{5,7,6,9,11,10,8},则返回true,因为这个整数序列是下图二叉搜索树的后序遍历结果。如果输入的数组是{7,4,6,5},则由于没有哪棵二叉搜索树的后序遍历结果是这个序...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述不换行:从上到下打印出二叉树的每个节点,同层的节点按照从左到右的顺序打印。例如,输入下图的二叉树,则依次打印出8,6,10,5,7,9,11。牛客网刷题地址要换行:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行86 105 7 9 11牛客网刷题地址之字形:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列{1,2,3,4,5}是某栈的压栈序列,序列{4,5,3,2,1}是该压栈序列对应的一个弹出序列,但{4,3,5,1,2}就不可能是该压栈序列的弹出序列。牛客网刷题地址思路分析如果下一个弹出的数字刚好是栈顶数字,那么直接...
阅读全文
摘要:一、持久层技术二、JdbcTemplate开发步骤:1. 导入相关的jar包2. 配置连接池(数据源)将参数设置到属性文件中:3. 创建表4. 编写实体类5. Dao层实现5.1 继承JdbcDaoSupport5.2 直接注入JdbcTmplate6. 测试JdbcTemplate 的CRUD(待整理)三、Hibernate四、MyBatis一、持久层技术Spring 中自带的 JdbcTemp...
阅读全文
摘要:一、数据库事务概述二、Spring中事务1. Spring 事务管理:2. Spring 事务管理的API:2.1 API概述2.2 PlatformTransactionManager 接口2.3 TransactionDefinition 接口(1) 隔离级别 (2) 事务的传播行为(3) 事务超时属性(一个事务允许执行的最长时间)(4) 事务只读(对事物资源是否执行只读操作)(5) 回滚规则...
阅读全文
摘要:一、事务概述二、事务的四大特性(ACID)三、事务的隔离性导致的问题四、数据库的四个隔离级别五、数据库中的锁机制:六、更新丢失七、并发事务所带来的的问题一、事务概述事务的概念:事务是指逻辑上的一组操作,这组操作要么同时完成要么同时不完成。假如小明要给小红转账1000元,这个转账会涉及到两个关键操作就是:将小明的余额减少1000元,将小红的余额增加1000元。万一在这两个操作之间突然出现错误比如银行...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数。在该栈中,调用min、push及pop的时间复杂度都是0(1)。牛客网刷题地址思路分析设置一个辅助栈用来存储每次进栈之后的最小元素测试用例新压入栈的数字比之前的最小值大。新压入栈的数字比之前的最小值小。弹出栈的数字不是最小元素。弹出栈的数字是最小元素。Java代码publ...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。 例如,如果输入如下矩阵:  则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。牛客网刷题地址思路分析将矩阵看成若干个顺时针方向的圈组成.第一步:接下来分析循环结束的条件。假设这个矩阵的行数是rows,列数是columns。打印第...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请实现一个函数,用来判断一-棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。牛客网刷题地址思路分析 利用前序遍历(根-左-右)和对称器前序遍历(根-右-左),查看两个的遍历序列是否相同,如果出现二叉树中全是同一节点的情况,我们可以讲null也添加到遍历序列中比较。 利用递归的方法,在遍历的过程中比较他们的值是否相同,...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述请完成一个函数,输入一颗二叉树,该函数输出它的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 ...
阅读全文
摘要:一、概述二、@EnableAspectJAutoProxy 注解分析三、分析AnnotationAwareAspectJAutoProxyCreator四、执行流程1. registerBeanPostProcessors()2. finishBeanFactoryInitialization()3. InstantiationAwareBeanPostProcessor后置处理器的执行逻辑4. ...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述输入两棵二叉树A和B,判断B是不是A的子结构。图中右边的树是左边的子结构思路分析先对树A进行遍历,找到与树B的根结点值相同的节点R;判断树A中以R为根结点的子树是否包含B树一样的结构。测试用例功能测试:树A和树B都是普通的二叉树;树B是或者不是树A的子结构。特殊输入测试:两棵二叉树的--个或者两个根节点为nullptr指针;二叉树的所有节点都没...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。例如,输入图中的链表1和链表2,则合并之后的升序链表如链表3所示。链表节点定义如下:思路分析非递归,设置一个头结点,比较两个链表中的值,通过头结点将其串联起来,最后返回的是头结点的next递归方法。测试用例功能测试:输入的两个链表有多个节点;节点的值互不相同或者存在值...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。思路分析利用三个指针,pre,p,pNext,将p的next指向前面的节点,注意反转之后的头节点。头插法的思想,设置一个头结点,利用头插法建立链表测试用例功能测试:输入的链表含有多个节点;链表中只有一个节点。特殊输入测试:链表头节点为nullptr指针。Java代码publi...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述一个链表中包含环,如何找出环的入口结点?思路分析判断链表中是否有环:用快慢指针的方法,慢指针走一步,快指针走两步,如果快指针追上了慢指针,就说明有环,而且他们相遇的节点是处于环中的节点统计环中节点的个数:利用1中返回的节点,当再次走到该节点时,正好遍历了整个环,从而可以统计出个数n。找出入口结点:也是设置两个指针,第一个指针先向后移动n,第二个...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述输入一个链表,输出该链表中倒数第k个结点。思路分析采用双指针的方法,第一个指针首先向前移动k-1个位置,第二个指针指向头节点,然后将两个指针同时向后移动,如果第一个指针走到链表尾结点时,第二个指针的位置就正好为 倒数第k个节点测试用例功能测试:第k个节点在链表的中间;第k个节点是链表的头节点;第k个节点是链表的尾节点。特殊输入测试:链表头节点为n...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,(偶数之间和奇数之间要保持相对顺序)思路分析如果题目没有要求保持相对顺序,则可以利用快速排序中的“二分”的思想,设置两个指针分别指向数组的头和尾,要将奇数排在偶数的前面,就要头指针扫描到偶数时停止,尾指针要扫描到奇数时停止如...
阅读全文
摘要:一、AOP概述二、AOP的术语:三、AOP底层原理四、Spring 中的AOP1. 概述2. 分类3. Spring的传统AOP针对所有方法的增强:(不带有切点的切面)带有切点的切面:(针对目标对象的某些方法进行增强)4. 自动代理BeanNameAutoProxyCreatorDefaultAdvisorAutoProxyCreator区别:基于ProxyFattoryBean的代理与自动代理5...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。思路分析 根据《剑指Offer》中使用A.Be/EA的模式,A部分表示带符号整数,B部分表示无..
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 请实现一个函数用来匹配包括'.'和'*'的正则表达式。 模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。 例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 思路分析 使用递归函数 matchCor...
阅读全文
摘要:代理模式概述代理模式应用场景代理模式的分类静态代理概述代码动态代理概述JDK 动态代理代码CGLib动态代理代码疑惑(已解决)代理模式概述 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能. 这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。【示例】输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> ...
阅读全文
摘要:题目描述思路分析测试用例代码链接题目描述 给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。思路分析 一般我们删除单链表中的节点是需要遍历链表,找到要删除节点的前一个元素,但是那样的时间复杂度为O(n),要在O(1)的时间内删除给出的节点,我们可以将删除节点p的下一个结点的值赋给p ,而我们只要删除p的下一个结点就可以了,同时我们还要注意边界值:要删除的节点p是尾结点,...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路分析 由于是有序链表,要删除重复节点,,我们可以先设置三个指针,pre,p,next,分别指向前一个节点,当前节点,和下一个结点,遍历链表,判断当前节点和下一个结点是...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。思路分析要考虑到大数问题,我们要求的n位数是否的整数,这里明显没有限制n的大小,我们可以用字符串来打印n位数我们需要做两件事情:在字符串表达的数字上模拟+1 ,对字符串进行加一操作,注意停止加一的时机,即当最高位+1时,如果产生进位,则停...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 思路分析要考虑到指数为负数的情况,而且指数为负数的时 base不能为0,因为指数为负数时,是指数的绝对值次幂的倒数,(分母不能为0),考虑到这些情况之后,就可以转化为求expon...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例给定 nums = [2, 7, 11, 15], target = 9 ,因为 nums[0] + nums[1] = 2 + 7 = 9 , 所...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。思路分析让整数和1相与,可以判断整数二进制表示中最右边一位是否为1,将1左移之后再和整数相与,可以比较右数第二位,循环比较,就可以统计出二进制中1的个数(可能一般想到的是将整数右移,之后再和1相与,但是这种方法传入负数时会陷入死循环,因为负数的右移操作会在高位补1,而不是0)一个...
阅读全文
摘要:题目描述思路分析测试用例Java代码代码链接题目描述 给你一根长度为n绳子,请把绳子剪成m段(m、n都是整数,n>1并且m≥1)。每段的绳子的长度记为k[0]、k[1]、……、k[m]。k[0]* k[1]*…*k[m]可能的最大乘积是多少?例如当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到最大的乘积18。思路分析动态规划: 定义函数f(n) 为将长度为n的绳子剪成若干段后...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?思路分析...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 \[ \begin{matrix}a & b & t &g \\c & f & c & s\\j & d & ...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。思路分析利用二叉查找的思路,由于是旋转数组,可以分成两个排序的子数组,而且最小...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。思路分析递归的思路,会出现很多重复的操作,效率低下;可以从下往上计算,首先根据f(0)和f(1)计算出f(2),再根据f(1)和f(2)计算出f(3),一次类推,可以计算出第n项。算法的时间复杂度为O(n);Java代码public class O...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。思路分析其实就是斐波那契数列,f(1)=1 f(2) =2 ,n= 3时,两种情况:青蛙先跳一个台阶,后面还有两个台阶,所以跳法就为f(2),青蛙先跳两个台阶,后面还有1个台阶,所以跳法就为f(1),综上 n=3 时 跳法为f(1)+...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 用两个栈实现队列 思路分析栈--> 先进后出 队列--> 先进先出进队列操作,选择栈s1进栈,关键在与实现出队列操作,要考虑到队列先进先出的性质,出队列时要将s1中的元素弹出并压入栈s2中,然后s2弹栈就可以保证先进先出的性质。Java代码public class Offer009 { public static void main(St...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。 思路分析设计的方法中输入的是两个数组,前序(pre)和中序(in)遍历数组;pre的第一个元素一定是根元素,然后...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? 树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指针。思路分析链表的结构中 有指向父结点的指针,方法输入为二叉树的头结点分为两种情况:若当前结点有右子树时,它中序遍历的下一个结点为 它的右子树中的最左子结点;若当前结点没有右子树时:该结点是它父结点的左子结点,那...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 从尾到头打印链表,将其添加到ArrayList当中输出 思路分析递归的思路利用栈Java代码public class Offer006 { public static void main(String[] args) { ListNode ListNode1 = new ListNode(1); ListNode ...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路分析 由于给定的二位数组是从左到右递增,从上到下递增,所以可以选择二维数组中的某一个边角(右上角或者左下角)开始进行搜索和筛选,比如:从右上角开始,如果目标数字大于右上角的数字(由...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 请实现一个函数,把字符串中的每个空格替换成"%20"。 例如输入“We are happy.”,则输出“We%20are%20happy.”。思路分析Java中实现字符的替换可以使用String内置的函数replaceAll考虑不用Java中的函数实现:根据牛客网练习题中所定义的函数中参数为StringBuffer,返回值为String。整体思路就...
阅读全文
摘要:题目描述思路分析Java代码代码链接题目描述 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。 请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。 思路分析 题目中数组长度为 n+1 ,而数字的范围为1 ~ n,说明数组中必然存在重复的数字,可以利...
阅读全文
摘要:题目描述思路Java代码代码链接题目描述 在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。 请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是重复的数字2或者3。思路排序后再查找 ❎利用哈希表来解决问题,扫描数组中的数字,没扫到一个数字的时候将其加入哈希...
阅读全文
摘要:一、关于容器1. ApplicationContext和BeanFactory2. 配置文件XML方式Java-configuration 方式@Configuration3. 初始化容器XML方式注解方式二、初始化Bean1. XML配置方式利用构造方法利用静态工厂方法利用实例工厂2. 注解的方式@Component开启注解扫描在XMl文件中开启注解@ComponentScan3. Java-C...
阅读全文