自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Forat

https://github.com/chuerat 联系我:foratluo@gmail.com

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

原创 JVM自动内存管理机制学习笔记

JVM对Java运行时数据区的划分:程序计数器(线程私有)可以看作是当前线程所执行的字节码的行号指示器。Java虚拟机栈(线程私有)描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数帧、动态链接、方法出口等信息。本地方法栈(线程私有)与虚拟机栈作用类似,为虚拟机使用到的Native方法服务。Java堆(线程共享)存放对象实...

2019-03-04 09:52:41 118

原创 常用排序算法总结(Java实现)

常用排序算法总结(Java实现)排序算法比较:1. 冒泡排序/** * 冒泡排序 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 * 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 * 针对所有的元素重复以上的步骤,除了最后一个。 * 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 * *...

2018-11-30 16:34:12 176

原创 8.9最长的可整合子数组的长度

题目可整合数组:如果一个数组在排序之后,每相邻两个数差的绝对值都为1,则该数组为可整合数组。给定一个整型数组arr,请返回其中最大可整合子数组的长度。代码实现public int getLIL(int[] arr) { if (arr == null || arr.length == 0) { return 0; } int len = 0;...

2019-06-01 15:01:21 748

原创 5.7判断字符数组中是否所有的字符都只出现过一次

题目给定一个字符类型chas[],判断chas中是否所有的字符都只出现过一次,请根据以下不同的两种要求实现两个函数。代码实现public boolean isUnique(char[] chas) { if (chas == null) { return true; } boolean[] map = new boolean[256]; ...

2019-06-01 14:58:04 439

原创 4.7最长公共子序列问题

题目给定两个字符串str1和str2,返回两个字符串的最长公共子序列。代码实现public class Lcse { public int[][] getdp(String str1, String str2) { //dp[i][j]的含义是str[0..i]与str2[0..j]的最长公共子序列的长度 int[][] dp = new int[...

2019-05-30 12:33:59 152

原创 2.8将单向链表按某值划分成左边小、中间相等、右边大的形式

题目给定一个单向链表的头节点head,节点的值类型是整形,再给定一个整数privot。实现一个调整链表的函数,将链表调整为左部分都是小于privot的节点,中间部分都是值等于privot的节点,右部分都是值大于privot的节点。如果链表的长度为N,时间复杂度请达到O(N)。进阶在原问题的要求之上再增加如下两个要求:在左、中、右三个部分的内部也做顺序要求,要求每部分里的节点从左到右的...

2019-05-14 11:10:56 194

原创 1.8最大值减去最小值小于或等于num的子数组数量

题目给定数组arr和整数num,共返回有多少个子数组满足如下情况:max(arr[i…j]) - min(arr[i…j]) <= num代码实现public int getNum(int[] arr, int num) { if (arr == null || arr.length == 0) { return 0; } LinkedL...

2019-05-13 17:20:54 188

原创 9.7蓄水池算法

题目有一个机器按自然数序列的方式吐出球(1号球,2号球,3号球,······),你有一个袋子,袋子最多只能装下K个球,并且除袋子外,你没有更多的空间。设计一种选择方式,使得当机器吐出第N号球的时候(N>K),你袋子中的球数是K个,同时可以保证从1号球到N号球中的每一个,被选进袋子的概率都是K/N。核心解法:蓄水池算法处理1~k号球时,直接放进袋子里。处理第i号球时(i>k...

2019-04-25 11:09:36 168

原创 8.8在行列都排好序的矩阵中找数

题目给定一个有N*M的整型矩阵matrix和一个整数K,matrix的每一行和每一列都是排好序的(从左到右递增,从上到下递增)。实现一个函数,判断K是否在matrix中。代码实现public boolean isContains(int[][] matrix, int K) { //从矩阵最右上角的数开始寻找 int row = 0; int col = matr...

2019-04-24 10:45:41 175

原创 5.6字符串的统计字符串

题目给定一个字符串str,返回str的统计字符串。补充题目给定一个字符串的统计字符串cstr,再给定一个整数index,返回cstr所代表的原始字符串上的第index个字符。代码实现public class GetCountString { public String getCountString(String str) { if (str == null |...

2019-04-23 10:43:37 222

原创 4.6汉诺塔问题

题目给定一个整数n,代表汉诺塔游戏中从小到大放置的n个圆盘,假设开始时所有的圆盘都放在左边的柱子上,想按照汉诺塔游戏的要求把所有的圆盘都移到右边的柱子上。实现函数打印最优移动轨迹。进阶题目给定一个整型数组arr,其中只含有1、2和3,代表所有圆盘目前的状态,1代表左柱,2代表中柱,3代表右柱,arr[i]的值代表第i+1个圆盘的位置。如果arr代表的状态是最优移动轨迹过程中出现的状态,返...

2019-04-22 22:51:09 211

原创 2.7判断一个链表是否为回文结构

题目给定一个链表的头节点head,请判断该链表是否为回文结构。代码实现public class IsPalindrome { //需要O(N)额外空间 public boolean isPalindrome1(Node head) { if (head == null || head.next == null) { return t...

2019-04-22 22:50:26 138

原创 1.7生成窗口最大值数组

题目有一个整型数组arr和一个大小为w的窗口从数组的最左边滑到最右边,窗口每次向右边划一个位置。如果数组长度为n,窗口大小为w,则一共产生n-w+1个窗口的最大值。请实现一个函数。输入:整型数组arr,窗口大小为w。输出:一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值。代码实现public class GetMaxWindows { pub...

2019-04-18 21:46:06 110

原创 9.6折纸问题

题目请把一段纸竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折两次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。思路产生第i+1次折痕的过程,就是在对折i次产生的每一条折痕的左右...

2019-04-17 11:00:19 237

原创 8.6需要排序的最短子数组长度

题目给定一个无序数组arr,要使数组排序成递增的,求出需要排序的最短子数组长度。代码实现public class GetMinLength { public int getMinLength(int[] arr) { if (arr == null || arr.length < 2) { return 0; } ...

2019-04-16 11:19:35 169

原创 7.4在其它数都出现k次的数组中找到只出现一次的数

题目给定一个整型数组arr和一个大于1的整数k。已知arr中只有1个数出现了一次,其他的数都出现了k次,请返回只出现了一次的数。提示:k进制的两个数a和b,在i位上无进位相加的结果就是(a(i)+b(i))%k。那么,如果k个相同的k进制数进行无进位相加,相加的结果一定是每一位上都是0的k进制数。代码实现public class OnceNum { public int on...

2019-04-15 14:00:08 525

原创 5.5替换字符串中连续出现的指定字符串

题目给定三个字符串str、from和to,已知from字符串中无重复字符,把str中所有from的子串全部替换成to字符串,对连续出现from的部分要求只替换成一个to字符串,返回最终的结果字符串。代码实现public class Replace { public String replace(String str, String from, String to) { ...

2019-04-15 13:59:24 215

原创 4.5最长递增子序列

题目给定数组arr,返回arr的最长递增子序列。举例arr=[2,1,5,3,6,4,8,9,7],返回的最长递增子序列为[1,3,4,8,9]。代码实现public int[] getdp(int[] arr) { int[] dp = new int[arr.length]; //dp[i]表示在以arr[i]这个数结尾的情况下,arr[0...i]中的最大递增子序列长度...

2019-04-11 19:08:49 157

原创 3.4找到二叉树中的最大搜索二叉子树

题目给定一棵二叉树的头节点head,已知其中所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这棵子树的头节点。代码实现public TreeNode biggestSubBST(TreeNode head) { int[] record = new int[3]; return posOrder(head, record);}//整体过程是后序遍历p...

2019-04-10 16:47:30 382

原创 2.6环形单链表的约瑟夫问题

题目用单向环形链表描述该结构并呈现整个自杀过程。输入:一个环形单向链表的头节点head和报数的值m。返回:最后生存下来的节点,且这个节点自己组成环形单向链表,其它节点都删掉。代码实现public Node josephuKill(Node head, int m) { if (head == null || head.next == head || m < 1) { ...

2019-04-09 11:22:35 107

原创 1.6用栈来求解三柱汉诺塔问题

题目求三柱汉诺塔有N层的时候,打印最优移动过程和最优移动总步数。且限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。思路修改后的汉诺塔问题实际动作只有4个:“左”到“中”,“中”到“左”,“中”到“右”,“右”到“中”。一个动作能发生的先决条件有两个:不违反小压大原则:from栈弹出的元素num如果想压入to栈中,那么num的值必须小于当前to...

2019-04-09 11:21:57 214

原创 8.4找到无序数组中最小的k个数

题目给定一个无序的整型数组arr,找到其中最小的k个数。时间复杂度至少为O(Nlogk)。代码实现public int[] getMinKNumsByHeap(int[] arr, int k) { if (k < 1 || k > arr.length) { return arr; } int[] kHeap = new int[k...

2019-04-03 20:44:02 331

原创 4.4换钱的方法数

题目给定数组arr,arr中所有的值都为正数且不重复。每个值代表一种面值的货币,每种面值的货币可以使用任意张,再给定一个整数aim代表要找的钱数,求换钱有多少种方法。代码实现public int coins1(int[] arr, int aim) { if (arr == null || arr.length == 0 || aim < 0) { retu...

2019-04-01 15:55:30 160

原创 3.3在二叉树中找到累加和为指定值的最长路径长度

题目给定一棵二叉树的头节点head和一个32位整数sum,二叉树节点值类型为整型,求累加和为sum的最长路径长度。路径是指从某个节点往下,每次多选择一个孩子节点或者不选所形成的节点链。代码实现public int getMaxLength(TreeNode head, int sum) { HashMap<Integer, Integer> sumMap = new ...

2019-03-27 13:01:31 432

原创 8.12未排序数组中累加和为给定值的最长子数组长度

题目给定一个无序数组arr,其中元素可正、可负、可0,给定一个整数k。求arr所有的子数组中累加和为k的最长子数组长度。代码实现public int maxLength(int[] arr, int k) { if (arr == null || arr.length == 0) { return 0; } HashMap<Integer,...

2019-03-26 15:06:07 267

原创 2.5反转部分单向链表

题目给定一个单向链表的头节点head,以及两个整数from和to,在单向链表上把第from个节点到第to个节点这一部分进行反转。代码实现public Node reversePart(Node head, int from, int to) { int len = 0; Node node1 = head; Node fPre = null; Node t...

2019-03-26 15:05:26 104

原创 1.5用一个栈实现另一个栈的排序

题目一个栈中元素的类型为整型,现在将该栈从栈顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?代码实现public static void sortStackByStack(Stack<Integer> stack) { Stack<Integer> help = new Stack<&g...

2019-03-23 10:26:29 138

原创 9.4判断一个点是否在矩形内部

题目在二维坐标系中,所有的值都是double类型,那么一个矩形可以由4个点来代表,(x1,y1)为最左的点、(x2,y2)为最上的点、(x3,y3)为最下的点、(x4,y4)为最右的点。给定4个点代表的矩形,再给定一个点(x,y),判断(x,y)是否在矩形中。代码实现public class IsInside { //矩形的边平行于坐标轴时 public boolean ...

2019-03-22 12:41:45 1176

原创 8.3“之”字形打印矩阵

题目给定一个矩阵matrix,按照“之”字形的方式打印这个矩阵。代码实现 public void printMatrixZigZag(int[][] matrix) { int tR = 0; int tC = 0; int dR = 0; int dC = 0; int endR = matrix.l...

2019-03-21 19:42:00 129

原创 整数的二进制表达中有多少个1

题目给定一个32位整数n,可为0,可为正,也可为负,返回该整数二进制表达中1的个数。代码实现//整数n每次进行无符号右移一位,检查最右边的bit是否为1来进行统计public int count1(int n) { int res = 0; while (n != 0) { res += n & 1; n >>&gt...

2019-03-20 14:55:14 207

原创 JVM类加载机制学习笔记

一、类的生命周期加载(Loading)-&amp;gt;验证(Verification)-&amp;gt;准备(Preparation)-&amp;gt;解析(Resolution)-&amp;gt;初始化(Initialization)-&amp;gt;使用(Using)-&amp;gt;卸载(Unloading)其中:验证、准备、解析三个部分统称为连接(Linking)加载、验证、准备、初始化和卸载这5个阶段的顺序是确定的,...

2019-03-15 17:41:04 110

原创 2.4反转链表和双向链表

题目实现反转链表和双向链表代码实现//反转单向链表public Node reverseList(Node head) { Node pre = null; Node next = null; while (head != null) { next = head.next; head.next = pre; pr...

2019-03-13 10:40:41 309

原创 1.4猫狗队列

题目实现猫狗队列代码实现//宠物类class Pet { private String type; public Pet(String type) { this.type = type; } public String getPetType() { return this.type; }}//狗类cla...

2019-03-12 13:28:55 181

原创 9.3有关阶乘的两个问题

题目给定一个非负整数N,返回N!结果的末尾为0的数量。进阶题目给定一个非负数N,如果用二进制数表达N!的结果,返回最低位的1在哪个位置上,认为最右的位置为位置0。代码实现public class ZeroNum { //找出1~N所有的数中,一共含有多少个因子5,即为N!结果的末尾有多少个0 //对每一个数i来说,处理的代价是logi(以5为底),一共有O(N)个数。...

2019-03-11 14:28:33 219

原创 8.2将正方形矩阵顺时针转动90度

题目给定一个N*N的矩阵matrix,把这个矩阵调整成顺时针转动90度后的形式。要求额外空间复杂度为O(1)。代码实现 public void rotate(int[][] matrix) { int tR = 0; int tC = 0; int dR = matrix.length - 1; int dC = ma...

2019-03-09 13:21:29 217

原创 7.2只用位运算不用算术运算实现整数的加减乘除运算

题目给定两个32位整数a和b,可正、可负、可0。不能使用算术运算符,分别实现a和b的加减乘除运算代码实现public class Arithmetic { /** * 加法 * a^b即不考虑进位的加法 *(a&amp;b)&lt;&lt;1即进位产生的值,因为只有1+1才会产生进位 * * @param a 加数a *...

2019-03-08 13:38:46 362

原创 5.3去掉字符串中连续出现k个0的子串

题目给定一个字符串str和一个整数k,如果str中正好有连续的k个‘0’字符出现时,把k个连续的‘0’字符去除,返回处理后的字符串。代码实现 public String removeKZeros(String str, int k) { if (str == null || k &lt; 1) { return str; }...

2019-03-04 13:33:23 152

原创 3.2较为直观地打印二叉树

题目二叉树可以用常规的三种遍历结果来描述其结构,但是不够直观,尤其是二叉树中有重复值的时候,仅通过三种遍历的结果来构造二叉树的真实结构更是难上加难,有时则根本不可能。给定一颗二叉树的头节点head,已知二叉树节点值的类型为32位整数,请实现一个打印二叉树的函数,可以直观地展示树地形状,也便于画出真实地结构。代码实现public class PrintTree { public...

2019-02-28 11:01:34 288

原创 2.3删除链表的中间节点和指定位置处的节点

题目给定链表的头节点head,整数a和b,实现删除a/b处节点的函数。代码实现public class RemoveByRadio { public class Node { public int value; public Node next; public Node(int data) { this.v...

2019-02-27 11:12:21 119

原创 1.3如何仅用递归函数和栈操作逆序一个栈

题目仅用递归函数,实现栈中元素的逆序。代码实现:/** * 将栈stack的栈底元素返回并移除 * * @param stack * @return 栈底元素 */public static int getAndRemoveLastElement(Stack&lt;Integer&gt; stack) { int result = stack.pop(); i...

2018-12-27 10:14:26 122

空空如也

空空如也

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

TA关注的人

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