自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

梧秋的博客

一声梧叶一声秋

  • 博客(115)
  • 收藏
  • 关注

原创 SpringBoot注解读取配置文件的方式

一、@Value读取application.properties配置文件中的值application.properties配置文件fileName=configNamePropertiesConfig类文件import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;@Componentpublic class PropertiesConfi

2021-02-09 11:36:02 1263 1

原创 迭代器模式

定义迭代器模式就是遍历集合的一种方式。比如去游乐园排队买票,售票员根据排队的顺序一次售票。用法示例Aggregate接口,表示集合能力的接口,实现该接口可以保存多个元素。public interface Aggregate { Iterator iterator();}Iterator接口,表示迭代能力的接口,实现该接口可以遍历集合中的元素。public interface Iterator { /** * 判断是否存在下一个元素 */ boole

2020-09-30 11:22:06 275

原创 面试题49(剑指offer)--丑数

题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路:丑数由另外一个丑数乘以2,3或者5得到,因此我们可以创建一个数组,里面的数字是有序的丑数。下一个丑数的值应该为min(ugly[pNum2]*2,ugly[pNum3]*3,ugly[pNum5]...

2019-08-19 22:29:09 261

原创 面试题39(剑指offer)--数组中出现次数超过一半的数字

题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:有一个数字超过数组的一半,就是说有一个数字出现的次数比其他数字次数的和还要大,可以考虑遍历数组保存两个值数字以及其出现的次数,如果下一个数字和前一个数字不同且前一个数字不...

2019-08-19 18:37:07 350

原创 面试题46(剑指offer)--把数字翻译成字符串

题目:给定一个数字,按照如下规则翻译成字符串:0翻译成“a”,1翻译成“b”…25翻译成“z”。一个数字有多种翻译可能,例如12258一共有5种,分别是bccfi,bwfi,bczi,mcfi,mzi。实现一个函数,用来计算一个数字有多少种不同的翻译方法。思路:动态规划,dp[i]表示从个位到第i位,一共有多少种表达方式,以12345为例,当第i位和i+1位的值大于25时,比如34,因为3和...

2019-08-19 18:04:32 208

原创 面试题8(剑指offer)--二叉树的下一个节点

题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:如果当前节点有右孩子节点,如果其右孩子有左孩子节点,则其右孩子的最左孩子节点就是当前节点的下一个节点,如果其右孩子节点没有左孩子节点,则右孩子节点就是当前节点的下一个节点。如果当前节点没有右孩子,但有父节点,如果当前节点是其父节点的右孩子,则p...

2019-08-19 17:03:02 254

原创 面试题43(剑指offer)--1~n整数中1出现的次数

题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12,1一共出现了5次。思路:从最低位到最高位分开计算。假如要计算百位上1出现的次数由高位的数字,低位的数字,百位以上的数字。若百位上数字为0,百位上可能出现1的次数由高位决定。比如:2013,百位出现1的情况:100199,11001199,一共200...

2019-08-19 16:47:04 173

原创 面试题30(剑指offer)--包含min函数的栈

题目:定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。在该栈中调用push、pop、top、min的时间复杂度都是o(1)。思路:借助一个辅助栈存储最小值,这样就能在O(1)时间内取得最小值。代码: public class MinStack { Stack<Integer> mainStack = new Stack<>(); ...

2019-08-19 16:24:12 131

原创 面试题45(剑指offer)--把数组排成最小的数

题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:重新定义比较大小的规则,例如3和32组成,有332>323,那么3>32.代码: public static String PrintMinNumber(Integer[] numbers)...

2019-08-19 11:13:52 122

原创 面试题40(剑指offer)--最小的k个数

题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。思路:用快排的思想,partation函数返回值大于其左边的值,小于其右边的值。如果返回的index正好为k-1则,其前面的值就是最小的k个数,如果index小于k-1说明index后面的值也在最小的k个数里,继续在后面查找,index大于k-1时,相反。代码:...

2019-08-19 11:01:16 143

原创 面试题41(剑指offer)--数据流中的中位数

题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。思路:建立两个堆,一个最小堆一个最大堆,要达到当元素数量是偶数时,中位数就是两个堆顶的平均值,如果为奇数,就是两个堆中多的那的堆的堆顶元素这样的效果。就需要在入堆时,count为偶数时,如果插入的数...

2019-08-19 10:32:59 156

原创 面试题25(剑指offer)--合并两个排序的链表

题目:输入两个递增序列链表,合并这两个链表并使新链表中的结点仍然是递增排序的。思路:从头开始比较两个递增的链表,较小的节点比如list1先进入新链表,然后list1.next与list2继续比较,直至两个链表合并完成。代码: public static ListNode merge(ListNode list1,ListNode list2){ if (list1==nu...

2019-08-19 10:12:48 110

原创 面试题47(剑指offer)--礼物的最大值

题目: 在一个 m*n 的棋盘中的每一个格都放一个礼物,每个礼物都有一定的价值(价值大于0).你可以从棋盘的左上角开始拿各种里的礼物,并每次向右或者向下移动一格,直到到达棋盘的右下角。给定一个棋盘及上面个的礼物,请计算你最多能拿走多少价值的礼物?思路:动态规划,dp[i][j]表示从左上角移动到(i,j)时,最大礼物价值。由于只能向右或者向下,则dp[i][j]的值就是左边一个和上边一个中的最...

2019-08-19 09:59:56 214

原创 面试题42(剑指offer)--连续子数组的最大和

题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。思路:使用动态规划,dp[i]为以i为尾的连续子数组的最大和,dp[i]=Math.max(dp[i-1]+array[i],array[i])。如果dp[i-1]+array[i]>array[i]说明i前面的子数组最大和大于0,加上后值变大,若...

2019-08-19 09:44:35 216

原创 面试题48(剑指offer)--最长不含重复字符的子字符串

题目:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该子字符串的长度。思路:动态规划:定义f(i)为以第i个字符结尾时不包含重复字符的子字符串的最长长度,只有一个字符时f(0)=1,有两个字符且不相等时f(1)=2,f(n)当第n个字符在前面未出现过则f(n)=f(n-1)+1,当第n个字符在前面出现过时,比较它和上一次出现的距离d与f(n-1)大小,如果d<=f(n-1)说...

2019-08-17 19:43:54 370

原创 面试题23(剑指offer)--链表中环的入口节点

题目:给一个链表,若其中包含环,请找出该链表的环的入口结点。思路:链表中环的入口节点先确定有环,用快慢指针,记录多少步,快指针追上慢指针,步数即为环的长度第一个指针先走环的长度,然后第一和第二个指针一起走,相遇点就是入口节点代码: public static ListNode inNode(ListNode node){ ListNode slowNode=n...

2019-08-17 19:24:24 132

原创 面试题32(剑指offer)--从上到下打印二叉树

题目一:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印 ,每一层打印一行。思路:使用变量记录第几行有几个节点要打印,toBePrinted记录该行要打印的节点数量,nextLevel统计下一行要打印的节点数。代码: /** * 分行从上到下打印 * @param node */ private static void Print(Binar...

2019-08-17 19:17:16 136

原创 面试题50(剑指offer)--第一个只出现一次的字符

题目:字符串中第一个只出现一次的字符。思路:用HashMap存储每个字母出现的次数,然后从头遍历找到第一个次数为1的字母,返回即可。代码: private static String FirstNotRepeate(String str) { if (str==null||str.length()==0){ return "0"; ...

2019-08-17 19:00:07 139

原创 面试题22(剑指offer)--链表中倒数第k个节点

题目:输入一个链表,输出该链表中倒数第k个结点。思路:用两个指针,第一个先走k-1步,然后两个指针同时走,当第一个指针走到尾部时,第二个指针指向的就是第k个节点。代码: /** * 链表的倒数第K个节点 * @param head * @param k * @return */ private static ListNode E...

2019-08-17 18:45:43 117

原创 面试题18(剑指offer)--删除链表的节点

题目一:在O(1)时间删除链表结点。给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。思路:由于单向链表只有next指针,要删除给定节点必须要知道它的上一个节点,通常会从头遍历复杂度为O(n),不满足题目,可以将给定节点的下一个节点的值赋值给给定节点,然后删除给定节点的下一个节点,与删除给定节点的效果相同。代码: private static ListNode d...

2019-08-17 18:35:33 192

原创 面试题14(剑指offer)--剪绳子

题目:给你一根长度为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的绳子能够得到的最大乘积,f(n)=max(f(i)*f(...

2019-08-17 16:15:03 163

原创 面试题35(剑指offer)--复杂链表的复制

题目:请实现函数ComplexListNode Clone(ComplexListNode head),复制一个复杂链表。在复杂链表中,每个结点除了有一个Next指针指向下一个结点外,还有一个Sibling指向链表中的任意结点或者NULL。思路:在每个节点后插入要复制的节点复制节点间的连接关系拆解成两个链表代码: static class ListNode{ in...

2019-08-17 16:00:06 79

原创 面试题68(剑指offer)--树中两个节点的最低公共祖先

题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。最低公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”示例:输入: root = [4,2,1,3,5,7], p = 3, q = 1输出: 2解释: 节点 3 和节点 1 的最近公共祖先是节点 2。...

2019-08-15 21:38:09 207

原创 面试题67(剑指offer)--把字符串转换成整数

题目:将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。思路:主要是一些转换的细节,比如+,-号只能在第一位,而且只有+,-号的不是数字,含有0-9以及正负号以外的也不能转成整数。代码: public static int st...

2019-08-15 15:39:38 189

原创 面试题66(剑指offer)--构建乘积数组

题目:给定一个数组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[i]=A[0]A[1]…*A[i-1]A[i+1]…A[n-1]可以看做A[0]A[1]…A[i-1]的结果与A[i+1]…*A[n-1]结果的乘积,可以分成两次遍历:第一次从0到i-1,第二次从i+...

2019-08-15 14:53:25 165

原创 面试题65(剑指offer)--不用加减乘除做加法

题目:​ 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:题目要求不能使用加减乘除,想到使用位运算来代替加法计算一般分三步:1.各位相加不进位 2.计算进位 3.两者相加比如 7+9先相加是6,进位是10,然后10+6=16二进制下为00000111+00001001先相加00001110,进位00000010,然后0001110+...

2019-08-15 11:03:19 195

原创 面试题64(剑指offer)--求1+2+...+n

题目:求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路:题目要求不能使用for,if等条件判断语句,所以要用别的方式达到条件判断的效果,想到条件与&&有短路效果,可以用它作为判断终止条件。例如:(n>0)&&(条件),当n>0时,执行后面条件,n...

2019-08-15 10:22:31 109

原创 面试题63(剑指offer)--股票的最大利润

题目:假设把某股票的价格按照时间先后顺序存储在数组中,请问买卖该股票一次可获得的最大利润是多少?示例: 一只股票在某些时间节点的价格为{9,11,8,5,7,12,16,14}。如果我们能 在价格为5的时候买入并在价格为16时卖出,则能获得最大的利润为11.解法: /** * 某天能获得最大利润取当天价格减去以前最小价格的值和 * 当天之前能获得的最大利润两者中的...

2019-08-14 18:10:13 144

原创 面试题62(剑指offer)--圆圈中最后剩下的数字

题目:0,1,…,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。解法: /** * 约瑟夫环问题: * 长度为n的解可以看作长度为n-1的解加上m之后对n取余 * 即f(n,m)=(f(n-1,m)+m)%n, * f(n-1,m)=(f(n-2,m)+m)%(n-1) * @p...

2019-08-14 17:10:42 300

原创 面试题61(剑指offer)--扑克牌中的顺子

题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。其中2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。解法: /** * 将大小王用0表示,与其他牌区分开 * 1.先对数组排序 * 2.统计0的个数 * 3.比较数组要组成顺子的差与0个数 * @param numbers ...

2019-08-14 15:21:55 93

原创 面试题60(剑指offer)--n个骰子的点数

题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s。输入n,打印出s的所有可能的值出现的概率。示例:输入:n = 2输出:{[2,0.03],[3,0.06],[4,0.08],[5,0.11],[6,0.14],[7,0.17],[8,0.14],[9,0.11],[10,0.08],[11,0.06],[12,0.03]}解法: /** * 动态规划规律...

2019-08-14 14:42:30 151

原创 面试题59(剑指offer)--队列的最大值

题目一: 滑动窗口的最大值。给定一个数组和滑动窗口的大小,请找出所有滑动窗口里的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}。 数组{2,3,4,2,6,2,5,1}的滑动窗口如下:数组中的滑动窗口滑动窗口中的最大值[2,3,4],2,6,2,5,142,[3,4...

2019-08-13 23:04:07 553

原创 面试题58(剑指offer)--翻转字符串

题目一: 翻转单词顺序。输入一个英文句子,翻转句子中单词的顺序,但单词内字符顺序不变。为简单起见,标点符号和普通字母一样处理。示例:输入字符串:"I am a student."输出:"student. a am I"解法: /** * 先将整个字符串翻转,然后翻转每个单词 * @param str * @return */ pub...

2019-08-13 23:03:10 142

原创 面试题57(剑指offer)--和为s的数字

题目一: 和为 S 的两个数字。输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。解法: /** * 数组是递增的序列,可以使用双指针指向首和尾, * 当首尾之和小于sum时,将头指针后移,小于sum * 时将尾指针前移,由于和相等的数字对,差越小 * 乘积越大,所以第一次等于...

2019-08-13 23:02:24 95

原创 用两个队列实现栈

题目: 用两个队列模拟实现栈的push以及pop操作。解法: /** * 两个栈实现队列只需要一个用做入栈操作, * 一个用做出栈操作,而两个队列实现栈需 * 要两个队列交替使用,当一个队列有元素, * 要出栈就需要出该队列的最后一个元素,所 * 以需要先把最后一个元素之外的元素,转到 * 另一个队列。 */ pri...

2019-08-12 21:27:43 219

原创 面试题9(剑指offer)--用两个栈实现队列

题目: 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解法: private Stack<Integer> stack1=new Stack<>(); private Stack<Integer> stack2=new Stack<>(); /** * 出队列从栈2出,栈2为空,先将...

2019-08-12 21:11:56 99

原创 面试题56(剑指offer)--数组中数字出现的次数

题目一: 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。解法: public void findNumsAppearOnce(int [] array,int num1[] , int num2[]) { int count=0; for (int i : array) { count=cou...

2019-08-12 20:31:36 202

原创 面试题55(剑指offer)--二叉树的深度

题目: 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解法:public int treeDepth(TreeNode root) { if (root == null) { return 0; }else{//深度为左右子树最深的加上根节点 ...

2019-08-12 20:30:08 84

原创 面试题54(剑指offer)--二叉搜索树的第K大节点

题目: 给定一棵二叉搜索树,请找出其中的第k小的结点。示例:例如,(5,3,7,2,4,6,8)中,按结点数值大小顺序第三小结点的值为4。解法: //中序遍历找到第k小的节点 private TreeNode lastNode = null; private int count = 0; TreeNode KthNode(TreeNode pRoot, int k)...

2019-08-12 20:28:45 107

原创 面试题53(剑指offer)--在排序数组中查找数字

题目一: 统计一个数字在排序数组中出现的次数。示例:Input: nums = 1, 2, 3, 3, 3, 3, 4, 6 K = 3Output: 4解法: public int getNumberOfK(int [] array , int k) { if (array.length==0||array==null){ r...

2019-08-12 20:26:55 177

空空如也

空空如也

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

TA关注的人

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