自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 八大排序算法(java版)

冒泡排序、插入排序、希尔排序、快速排序、归并排序、选择排序、堆排序

2020-08-16 18:38:51 597 1

原创 关于Java虚拟机垃圾收集GC的学习总结(二)

分代收集理论:在目前的大部分商用虚拟机中都遵循了分代收集的理论。分代收集主要基于以下两个假说:弱分代假说。绝大多数的对象的生命周期很短暂。强分代假说。经历过越多次数的垃圾收集还没被回收的对象其被回收的概率越低。这两个假说还是很符合我的直观感受的。在编程的时候也能发现,大多数的对象用完就不会用了,而一些经常需要使用到的对象则需要它一直存在。为

2020-08-01 16:18:00 187

原创 关于Java虚拟机垃圾收集GC的学习总结(一)

为何要进行垃圾收集?垃圾收集干了什么?如何判断对象已‘死亡’?引用计数法、可达性分析法为何要进行垃圾收集?使用Java语言编写程序,在大部分情况下都不需要程序员自己考虑内存的分配与回收,只需要向JVM申请空间即可。有句话说的好:“哪有什么岁月静好,只是有人在替你负重前行罢了!”。JVM替程序员干了这个活了,由于内存空间有限,而一些对象使用了之后就不会再使用了,若不对这些对象占据的内存进行回收,内存吃紧后势必会造成内存溢出(包括但不限于Java堆溢出)。垃圾收集干了什么?垃圾收集就是将不再需要的

2020-07-30 17:34:50 228

原创 跳跃游戏(Java)

广度优先遍历+剪枝 、贪心算法。给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。广度优先遍历:从最后一个元素出发,将其添加进队列,然后从后向前遍历数组,将可以到达这个位置的元素下标加入队列,然后队列里的数据继续这样处理,**直到出现下标为零的元素或者队列为空**。队列为空意味着没有任何途径可以到达数组末尾。

2020-07-28 11:47:09 615

原创 旋转图像(Java)

执行时间击败100% 给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

2020-07-25 11:25:13 157

原创 面试题 01.05. 一次编辑(Java)

题目描述字符串有三种编辑操作:插入一个字符、删除一个字符或者替换一个字符。 给定两个字符串,编写一个函数判定它们是否只需要一次(或者零次)编辑。示例:示例1:输入:first = “pale”second = “ple”输出:True示例 2:输入:first = “pales”second = “pal”输出:False题目链接递归对于两字符串长度差超过1的情况,显然不可能通过一次编辑就可以让它们相同,所以直接返回false。接下来就只需要考虑长度差在1以内的情

2020-07-24 11:05:18 183

原创 Object源码注释翻译及分析

Object类是类结构的根,所有的类都将继承(显式或者隐式)这个类。所有的对象及数组都会实现这个类的方法。registerNatives()这个方法被native修饰,这意味着这个方法并不是使用java实现的,它是一个本地方法,是由C/C++之类的其他语言编译而来的

2020-07-21 20:22:07 292

原创 交错字符串(Java)

递归优化、动态规划将s1或者s2中的第一个字符与s3的第一个字符匹配。只要有一个匹配成功则算s3的这个字符成功匹配。若是匹配成功则丢弃这个匹配过的字符,然后继续匹配。直到s3的长度为0,即所有s3所有字符都被匹配掉了。

2020-07-18 11:14:56 356

原创 最接近的三数之和(Java)

暴力法优化。对数组排序后,我们依次枚举最小数字作为第一个数字,然后选择数组中的最大值(最后一个元素)作为第三个数字。第二个数字则在最小数字和最大数字中间。若三个数字和较大则指向最大数字的指针前移,否则指向中间数字的指针后移。

2020-07-17 10:54:02 428

原创 判断二分图(Java)

执行时间击败100%。染色法,深度优先遍历。二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。判断二分图有一个十分经典的方法:染色法。

2020-07-16 10:35:35 985

原创 Java刷题笔记15:不同的二叉搜索树( Unique Binary Search Trees)

执行时间击败100%,递归优化与数学方法。二叉搜索树的特点就是对于每一个结点,其左子树的所有元素小于它,右子树所有元素大于它。所以我们可以枚举序列中的不同元素作为根节点,其左边的元素构成左子树,右边元素构成右子树

2020-07-15 10:39:11 347

原创 Java刷题笔记14:三角形最小路径和

本篇文章给出三种解。层序遍历、动态规划、滚动数组。顶点到达坐标(i,j)的最小路径之和 与顶点到达坐标(i-1,j-1)以及坐标(i-1,j)有关,取其中一个较小值然后加上当前坐标的值就得到了到达当前坐标的最小路径

2020-07-14 11:22:53 234

原创 Java刷题笔记13:寻找重复数

数组模拟链表,Floyd判圈法。执行时间击败100%。设置两个指针,遍历链表,一个指针每次走一步,一个指针每次走两步。若是链表存在环,那么在慢指针走到尾部前它们一定会相遇。简单说明一下,当链表中有环时,快指针一定会先进入环,并且一直在环中循环等待慢指针也进入环。假设环的周长为L,考虑极端情况,在慢指针到达环入口时,快指针恰好在慢指针的前面一步。此时慢指针与快指针的距离为L-1.每走一步它们的距离就会减一,而慢指针重新走回入口处需要L步,所以在慢指针走完之前快指针一定能追上它。

2020-07-13 11:12:36 292

原创 Java刷题笔记12:地下城游戏

动态规划为了求出初始点到终点所需的最小初始生命值,可以采取动态规划的方式求解。对于此题似乎有两种可行的动态规划方案 - 方案1:在dp[i][j]里保存初始点到坐标(i,j)的最小初始生命值。 - 方案2:在dp[i][j]里保存坐标(i,j)到终点所需的最小初始生命值。

2020-07-12 11:02:12 257

原创 Java刷题笔记11: 计算右侧小于当前元素的个数

插入排序+二分查找逆序遍历nums,用一个数组list从小到大存储目前遍历过的元素,那么在每遍历到一个nums里的元素nums[i]时,都可用二分查找的方式在list里找到比nums[i]小的元素数量,然后将这个元素插入list,由于是逆序遍历的原因,所以list里的元素一定是num[i]右边的元素

2020-07-11 10:37:27 442

原创 Java刷题笔记10: 最佳买卖股票时机含冷冻期

动态规划,执行时间击败99%。动态规划最重要的一步就是写出状态转移方程。在此题中看似有四种状态- 状态1:不处于冷却期,且持有一张股票- 状态2:不处于冷却期,且不持有股票- 状态3:处于冷却期,且不持有股票-状态4:处于冷却期,且持有一张股票~~

2020-07-10 10:07:07 204

原创 Java刷题笔记9:恢复空格

动态规划+字符串哈希。我们可以使用dp[i]来存储sentence中自0到第i个字符的最少未识别字符的数量。若第i个字符自己就算一个单词,那么dp[i]=dp[i-1],若第i个字符和第i-1个字符组成一个单词,则dp[i]=min(dp[i-1],dp[i-2])...直到查看完第i个字符是否可以和前面的所有字符组合成一个单词问题是如何判断第i个字符可以和之前的字符组成一个单词

2020-07-09 11:52:30 202

原创 Java刷题笔记8:跳水板

这是一道面试题。shorter<longer时,共有k+1种组合(用0块长木板、用1块长木板、...用k块长木板)。而且长木板多的组合总长度一定比长木板少的组合要长

2020-07-08 09:41:36 188

原创 Java中new到底干了些啥?

JVM将会在java堆中保存对象的实例数据,在方法区中保存对象类型信息.new会根据后面指定的类作为蓝图创建对象,首先得分析完这个蓝图,我们才能开始建造。所以,在创建一个对象时,我们首先得加载类,对类进行解析和初始化

2020-07-07 13:34:45 934 1

原创 Java刷题笔记7:路径总和

递归,执行时间击败100%。每次经过一个节点,都要使得sum减去此节点的值,表示记录下了此节点对于sum的贡献,若此时的sum=0,则意味着这个叶子结点到root结点的和恰好为sum

2020-07-07 09:11:00 183

原创 Java刷题笔记6:不同路径II

动态规划,执行时间击败100%。对于每一个格子,它都可由左边一个格子或者上边一个格子到达。那么我们可以用dp[i][j]来保存到达第i行第j列的格子的不同路径数。对于有障碍物的格子,我们认为它不可达。

2020-07-06 09:21:39 2338 2

原创 Java刷题笔记5:通配符匹配

可以使用dp[i][j]来保存s的前i个字符与p的前j个字符匹配情况。当p取到‘?’或者两个字符串取出来的字符相同时。只需要看dp[i-1][j-1]的情况即可,也就是之前的字符串匹配情况。

2020-07-05 10:38:28 321

原创 Java刷题笔记4:最长有效括号

击败100%。对于字符串从左至右开始遍历,将 '(' 与 ')' 的数量记录下来,当右括号的值大于左括号的值时,那么在它之前那个符号一定匹配成功。所以,此时子串长度为leftCount*2.重置计数器。继续遍历直到遍历完成

2020-07-04 11:09:57 280

原创 Java刷题笔记3:将有序数组转换为二叉搜索树

执行时间击败100%。递归,对于每一个结点,它的左右子树均从数组中取走一半的数,那么我们就可以保证左右两边子树的差值不会超过一.

2020-07-03 15:44:32 201

原创 Java刷题笔记2:有序矩阵中第K小的元素

有序矩阵中第K小的元素题目描述示例小顶堆二分查找题目描述给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第 k 小的元素。请注意,它是排序后的第 k 小元素,而不是第 k 个不同的元素。示例matrix = [ [ 1, 5, 9], [10, 11, 13], [12, 13, 15]],k = 8,返回 13。看到这个题,我首先就想到了优先队列。在查找第k个大小的元素时,小顶

2020-07-02 16:59:39 270

原创 Java刷题笔记1:最长重复子数组

Java刷题笔记1:最长重复子数组题目描述:示例:暴力法:动态规划:题目描述:给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。示例:输入:A: [1,2,3,2,1] B: [3,2,1,4,7]输出:3解释:长度最长的公共子数组是 [3, 2, 1]。点击跳转题目链接在LeetCode中这题属于中等难度题,一般来说中等难度题无法使用暴力法通过。但是本人头铁,就是想试一试,反正暴力法写起来相对来说是最简单的。当然,最主要的原因是通过暴力法我们能够清楚的感

2020-07-02 16:46:07 205

空空如也

空空如也

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

TA关注的人

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