![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java
文章平均质量分 66
pengfeierzhang
这个作者很懒,什么都没留下…
展开
-
java中的回调函数
什么是回调函数考虑两个类以及一个接口:A类和B类以及A类所实现的接口。A类package com.company.callbacktest;public class AClass implements Callback{ @Override public void caller() { System.out.println("第三步:该函数是回调函数,即A的函数在B中被调用"); } // A委托B做某事 public void aUse原创 2021-04-07 17:24:29 · 253 阅读 · 0 评论 -
while循环和do-while循环
do-while循环对于do-while循环来说,先进行一步操作,然后再进行条件判断。而对于while循环来说,就是先执行条件判断,然后再进行执行while逻辑。do-while转化为while循环一般while循环用的较多,可以通过在while循环的上面多写一遍业务逻辑来实现do-while到while的转换。do-while循环class Solution {public: int rand10() { int i = 0; do{原创 2020-09-05 00:20:00 · 2423 阅读 · 0 评论 -
leetcode 337. 打家劫舍III
337. 打家劫舍 III在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3,2,3,null,3,null,1] 3/ \2 3\ \3 1输出原创 2020-08-24 23:39:16 · 146 阅读 · 0 评论 -
2020-08-24
为什么HashMap在jdk1.7下是线程不安全的?HashMap为什么在并发情况下访问使用get函数会造成环?因为首先扩容时的transfer函数由于头插法造成了环,从而导致在使用get函数进行访问的时候出现CPU飙升的情况。首先看下transfer函数:void transfer(Entry[] newTable, boolean rehash) { int newCapacity = newTable.length; for (Entry<K,V> e : tabl原创 2020-08-24 23:33:11 · 146 阅读 · 0 评论 -
普通数字签名和JWT中的数字签名的区别
数字签名数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接受者。接受者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对接收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输的过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。数字签名是一个加密的过程,数字签名验证是一个解密的过程。JWT(Java web Token)JWT本身是为了解决服务端的token存储的问题,为了避免服务端存储大量的token,服务端可以原创 2020-08-23 22:10:39 · 714 阅读 · 1 评论 -
剑指offer:将字符串转化为整数
题目叙述:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0分析:字符串的第一个字符要单独考虑处理输入数据的上溢出和下溢出java中的字符串不便于下标访问字符,考虑先将其转化为字符数组代码:public class Solution { public int StrToInt(String str) { ...原创 2019-12-11 20:27:47 · 92 阅读 · 0 评论 -
剑指offer:求数据流的中位数
题目叙述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思考:考虑使用优先队列求取数据流的中位数。Java中的优先队列more是小顶堆代码:import ...原创 2019-12-11 14:29:12 · 83 阅读 · 0 评论 -
剑指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}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,...原创 2019-12-09 22:03:12 · 145 阅读 · 0 评论 -
剑指offer:复制复杂链表
题目叙述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)分析:主要是分为两步:先不考虑被复制链表的random数据域正常扫描链表,进行复制,复制的过程中建立要创建的新结点与被复制结点的哈希映射再次扫描被复制的链表,通过访...原创 2019-12-09 19:12:40 · 57 阅读 · 0 评论 -
剑指offer: 矩阵中的路径
题目叙述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如 a b c e s f c s a d e e 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占...原创 2019-12-08 17:08:07 · 58 阅读 · 0 评论 -
剑指offer:机器人的运动范围
题目叙述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。 例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?分析:要解决的问题:当机器人走到的位置...原创 2019-12-06 19:24:33 · 82 阅读 · 1 评论 -
剑指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]。不能使用除法。主要是进行两轮更新import java.util.ArrayList;public class Solution { public int[] multiply(int[] A) { ...原创 2019-12-08 14:43:38 · 59 阅读 · 0 评论 -
剑指offer: 和为S的连续的正数序列
题目叙述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!题目分析:可以结合等差数列的前n项和求解...原创 2019-12-08 14:11:17 · 64 阅读 · 0 评论 -
剑指offer:不用加减乘除做加法
题目叙述:写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。代码:public class Solution { public int Add(int num1,int num2) { //当不考虑进位时,两个数进行异或相当于二进制加 //两个数进行与操作就得到各位的进位位 while(num2!=0){ ...原创 2019-12-07 23:44:43 · 63 阅读 · 0 评论 -
剑指offer: 之字行打印二叉树
题目叙述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。题目分析:该题目和按层打印二叉树是属于同一个问题,只需要在按层打印时添加判断看是否是属于奇数行,如果是奇数行(行号从0开始)就先逆置再打印。方法一:public class Solution { public ArrayList&...原创 2019-12-06 10:44:52 · 212 阅读 · 0 评论 -
剑指offer: 按层进行打印二叉树
题目叙述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。题目分析:首先是使用队列对二叉数进行层序遍历,但是关键点在于能够利用队列的动态变化的长度得到目前应该打印的层。代码如下:public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ...原创 2019-12-05 20:24:18 · 99 阅读 · 0 评论 -
# 剑指offer:约瑟夫环
题目叙述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后一...原创 2019-12-05 19:31:28 · 87 阅读 · 0 评论 -
剑指offer:删除链表中的重复节点
题目一:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5public class Solution { public ListNode deleteDuplication(ListNode pHead) {...原创 2019-12-05 12:59:28 · 64 阅读 · 1 评论 -
剑指offer:求二叉树的下一个节点
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。题目分析:注意题目没有给出二叉树的根节点分情况进行讨论:如果给定的这个节点没有右孩子,则中序遍历的下一个节点就是该树的根节点,主要是根据父亲指针进行求根节点该种情况下需要考虑两种特殊情况: 第一:如果所给定的节点是根节点,则直接进行返回nul...原创 2019-12-05 12:00:52 · 63 阅读 · 0 评论 -
剑指offer:将一棵二叉搜索树转化为双向链表
题目叙述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。方法一:先对二叉树进行中序遍历并且将其遍历的所有结点进行保存遍历保存好的中序遍历序列然后进行修改其左右指向,这里需要注意的是第一个结点和尾结点需要单独处理。对于双向链表来说,第一个结点没有前指向,认为指向为空,尾结点没有后指向,认为指向为空。import java...原创 2019-12-05 09:54:20 · 98 阅读 · 0 评论 -
剑指offer: 求环的入口节点
题目叙述题目分析题目可以看做是一个数学问题,以下只给出结论,证明省略1.设立快慢指针都从初始节点开始出发,快指针一次走两步,慢指针一次走一步,两者终会在环中的某处相遇。2.在环中的某个相遇地点处,慢指针保持不变,快指针重新从链表的头部开始一次走一步,最终,两者相遇的地方就是环的入口节点参考代码public class Solution { public ListNode En...原创 2019-12-04 15:37:52 · 296 阅读 · 0 评论 -
剑指offer: 找到一个包含n个元素的数组中某一个重复的数字,该数组的元素的大小都是0-n-1
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。题目分析注意数组的长度是n数组中的所有的数字都在0-n-1的范围内方法一:class Solution: ...原创 2019-12-04 14:45:34 · 452 阅读 · 0 评论 -
剑指offer:找出数组中元素出现的次数超过一半的元素
题目描述:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析:首先这个元素只能是一个。如果对元素进行排序,该元素如果存在那么它肯定是出现在数组的中间位置。方法一:首先对数组进行排序取出中间位置的元素判断中间位置的元...原创 2019-12-04 14:17:56 · 274 阅读 · 0 评论 -
剑指offer:两数之和
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。对应每个测试案例,输出两个数,小的先输出。解答代码import java.util.ArrayList;public class Solution { public ArrayList<Integer> FindNumbersWi...原创 2019-11-05 22:55:09 · 127 阅读 · 0 评论 -
剑指offer
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题代码import java.util.Stack;public class...原创 2019-11-05 17:12:42 · 66 阅读 · 0 评论 -
剑指offer:翻转句子中的单词
牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?代码实现:方法一:使用str...原创 2019-11-05 14:10:55 · 91 阅读 · 0 评论 -
快速排序的两个版本总结
快速排序的核心主要在于part函数的编写版本一:参考严蔚敏教材注意点:左右区间为左闭合右闭合;Part的开始方向要和pivot的最初所取的方向相反public class Myquick { public static void quickSort(int[] array, int left, int right){ if (left>=right) r...原创 2019-10-16 11:01:21 · 184 阅读 · 0 评论 -
判断一个数组是否是一个二叉搜索树后序遍历的结果
关于递归的题目就是可能会造成死循环,即无限递归。为避免无限递归,有两点要注意。一定要有递归出口,即递归结束的条件对于有左右边界的递归函数,防止递归的参数一直相同问题定义:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。版本一: public boolean VerifySquenceOfBST...原创 2019-10-15 10:13:43 · 398 阅读 · 0 评论 -
归并排序和求逆序对
问题1:归并排序的实现public void partSort(int[] nums,int left, int right){ if (left==right-1) return; int mid = left+(right-left)/2; partSort(nums,left,mid);//都是左闭右开 partSort(n...原创 2019-10-10 14:18:13 · 80 阅读 · 0 评论 -
java中的排序II
1.java优先队列实现合并k个有序的链表优先队列在new的时候可以直接进行在后面的括号里加入比较器/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * ...原创 2019-09-12 14:10:50 · 188 阅读 · 0 评论 -
Java中的排序
Java中的排序主要是针对数组和集合进行排序,java采用Arrays和collection两个类中的静态方法分别对数组和集合进行排序。1.对数组进行排序实例1:直接进行普通的排序:Arrays.sort(nums); int [] nums = new int[5]; //System.out.println(nums.length); for(int i ...原创 2019-03-15 15:49:50 · 153 阅读 · 0 评论 -
Java中的for循环和python的for循环的不同
java中的for循环System.out.println("......");for(int i=0;i<5;i++){ System.out.println(i);}System.out.println("......");for(int i=0;i<5;i++){ System.out.println(i); i+=1;}python中的...原创 2019-08-29 20:11:02 · 2529 阅读 · 0 评论