自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (1)
  • 收藏
  • 关注

原创 leetcode 912. 排序数组【排序】

很直接的排序题,可以用来复习一下几种排序算法:方法1:插入排序class Solution { public int[] sortArray(int[] nums) { for(int i=1;i<nums.length; i++){ int j=i-1; int temp = nums[i]; ...

2020-03-31 21:42:06 106

原创 leetcode 面试题62. 圆圈中最后剩下的数字

方法1:暴力法,使用链表存储所有数字,然后计算要删除元素的索引。有两点需要注意:链表在删除掉一个元素后,会自动将后面的元素向前补齐,因此在计算下一个被删除元素的索引时,实际增加的量应该是 m-1;当索引超过链表长度时,需要从链表头开始重新计算,可以用 % 运算实现。class Solution { public int lastRemaining(int n, int m) ...

2020-03-30 10:02:27 198

原创 leetcode 1162. 地图分析【BFS】

在本题中,海洋与陆地的距离可以等效为对陆地节点进行广度优先搜索,直到遇到海洋节点前所搜索的层数。找出上述规律后,可用典型的队列实现对陆地节点的BFS了。不过这里有几点需要注意:搜索的第一层应当是所有陆地节点,即对所有陆地节点同时展开搜索,这样最后一个被放入队列的节点就是距离陆地最远的海洋节点;队列中存放的是海洋节点的坐标;定义一个dir数组来简化对一个陆地节点的搜索;将海洋节点放入队列...

2020-03-29 10:22:25 147

原创 leetcode 914. 卡牌分组【gcd】

首先计算deck数组中每个数字出现的次数,可以使用数组存储每个数字出现的次数。然后遍历数组,如果存在有出现次数为1的数字,则返回false,然后迭代地求每个数字出现次数的最小公约数,如果存在最小公约数为1,则不满足题目要求,返回false。数组遍历完,返回true。class Solution { public boolean hasGroupsSizeX(int[] deck) {...

2020-03-27 14:14:35 159

原创 leetcode 892. 三维形体的表面积【数组】

找出规律即可,先计算总的立方体个数,计算出若不存在叠加时的总表面积。再减去叠加造成的面积损失,叠加分为两种情况,一种是同网格内的叠加,根据一个网格内的立方体个数可以计算得到;第二种是两个相邻网格间的叠加造成的表面积损失,使用一个两层循环,为了避免重复计算,只计算网格左方和上方的叠加即可。class Solution { public int surfaceArea(int[][] gri...

2020-03-25 11:29:53 167

原创 leetcode 450. 删除二叉搜索树中的节点【BST】

删除节点可以分三种情况:被删除节点为叶子节点,此时只需要直接删除即可;被删除节点含有一个子节点,此时可以将该节点的子节点替换掉该节点,即将子节点的引用赋值给被删除节点的父节点;被删除节点含有左子树和右子树,此时可以利用左子树的最大节点或右子树的最小节点来替换掉被删除节点。class Solution { public TreeNode deleteNode(TreeNode r...

2020-03-24 23:33:58 120

原创 leetcode 701. 二叉搜索树中的插入操作【BST】

方法1:递归实现,当插入值比当前节点值小时,向左子树搜索;当插入值比当前节点值大时,向右子树搜索。当递归到终点(root==null)时,构造我们需要插入的节点,并返回该节点。注意:递归左、右子树时,需要将新生成的左、右子树的根节点地址赋值给其父节点的左、右引用。class Solution { public TreeNode insertIntoBST(TreeNode root,...

2020-03-24 20:48:30 116

原创 leetcode 75. 颜色分类【双指针】

题目要求在一次遍历内完成三种颜色的分类,那么可以考虑对分类完成后位于数组两端的颜色进行分类,第三种颜色自然会落在数组中间。使用双指针l和r,分别指向数组开头和末尾,然后从数组开头遍历数组,当数值为0时,与l指针对应的元素交换,并且同时+1,向后移位;当数值为2时,与r指针对应的元素交换。这里要特别注意,交换完成后,r指针-1,向前移位,而由于交换后,当前元素的数值未知,因此此时遍历指针不能+1...

2020-03-23 19:59:51 146

原创 leetcode 128. 最长连续序列【HashSet】

利用HashSet将数组中的元素去重,然后遍历数组,当set中存在一个比当前数字num小的连续数字(num-1)时,说明该数字num不是连续序列的起始元素,跳过后续步骤,继续遍历数组,直到遇到一个序列的起始元素。然后在set中寻找该数字向后连续的个数,并记录为连续序列的长度,最后取得所有连续序列的最大长度并返回。class Solution { public int longestCon...

2020-03-23 14:53:46 93

原创 leetcode 147. 对链表进行插入排序【链表、排序】

对链表进行插入排序,插入排序的基本思想是对链表分为两个部分,前半部分为已经排序部分,后半部分为未排序部分。每次插入过程取未排序部分的第一个元素作为待排序元素,然后遍历已排序部分的元素,找到第一个比待排序元素大的元素,将待排序元素插入到该元素前面,至此完成了一次插入排序操作。class Solution { public ListNode insertionSortList(ListNod...

2020-03-19 22:32:04 76

原创 leetcode 36. 有效的数独[【哈希表】

本题与数独关系不大,主要是判断在一个9X9的矩阵中每行元素、每列元素和没3X3的子矩阵中是否包含重复元素。可以采用数组或HashMap来记录每行、每列或每个子矩阵中出现过的元素,并记录出现次数,这样只需要对矩阵使用一次遍历便可以完成记录。最后判断一下是否存在出现次数大于2的元素即可。class Solution { public boolean isValidSudoku(char[]...

2020-03-17 14:13:08 84

原创 leetcode 12. 整数转罗马数字【字符串、贪心】

创建两个数组来记录罗马数字和阿拉伯数字之间的映射关系。利用贪心的思想,即利用尽可能少的罗马数字来表示出传入的整数,因此可以从数组中最大的罗马数字开始遍历。class Solution { public String intToRoman(int num) { int[] nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, ...

2020-03-17 10:58:23 78

原创 leetcode 面试题 01.05. 一次编辑【字符串】

首先,为了便于运算,可以先将first字符串通过处理后始终保持为更长的一个字符串,然后对于len1与len2相等和不相等两种情况进行处理。相等的情况比较简单,只能进行一次替换操作,只要两个字符串不相等的字符数大于1个,那么返回false;不相等的情况,由于经过处理后,second字符串较短,使用两个指针分别遍历两个字符串,当找到不相等的字符时,令j–,即模拟在second插入一个字符,并对插入...

2020-03-17 10:39:30 379

原创 leetcode 67. 二进制求和【字符串】

直接对两个字符串逐位逆序求和,若某个字符串长度不足,则补0即可。求和结束后需要判断一下进位变量是否为1。class Solution { public String addBinary(String a, String b) { StringBuilder sb = new StringBuilder(); int carry = 0; ...

2020-03-16 21:08:16 85

原创 leetcode 647. 回文子串

方法1:遍历字符串中的所有子串,并判断子串是否是回文子串。此方法效率较低,应想办法优化。class Solution { public int countSubstrings(String s) { int ans=0; int len = s.length(); if(len<2)return len; for(i...

2020-03-16 15:34:39 128

原创 leetcode 49. 字母异位词分组【HashMap】

根据字符串所包含的字母类型对字符串进行分类,可以想到利用HashMap保存一个公有的key,然后将该与该key对应的字符串都放入到该entry的value中。如何生成一个公有的key?可以提取出每个字符并进行排序,这样只要是含有相同字符的字符串经过处理后都能得到相同的key,从而实现分类。class Solution { public List<List<String&gt...

2020-03-15 09:57:38 73

原创 leetcode 102. 二叉树的层次遍历【BFS】

这个题比较简单,参考利用队列实现二叉树广度优先遍历的方法,在每层遍历前先记录一下该层的节点数量,再分别建立ArrayList来存储每层节点对应的数值即可。class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode&gt...

2020-03-14 21:28:40 134

原创 leetcode 48. 旋转图像【数组】

观察中给出的矩阵,将矩阵转置后,得到的结果与所需要的旋转矩阵每行元素相同,且只需要将每行元素翻转后,便可以得到所需要的旋转结果,因此可以使用两次操作实现矩阵的旋转。class Solution { public void rotate(int[][] matrix) { //将矩阵转置 for(int i=0; i<matrix.length; i++){...

2020-03-14 19:43:00 66

原创 leetcode 23. 合并K个排序链表【链表】

class Solution { public ListNode mergeKLists(ListNode[] lists) { if(lists.length==0){ return null; } ListNode dummyHead = new ListNode(-1); ListNode cur...

2020-03-13 09:14:19 79

原创 leetcode 56. 合并区间【数组】

先排序,题目没有说明数组是否有序,因此利用每个一维数组的首个元素对每个一位数组进行排序,注意compare方法的写法;排序后,从头部开始对数组进行遍历,若当前数组的第二个元素比下一个数组的第一个元素大,说明两个数组表示的区间有重合,更新right边界的最大值,并鸡血遍历数组,直到两个数组没有重合区域。class Solution { public int[][] merge(int...

2020-03-11 13:39:56 119

原创 leetcode 1013. 将数组分成和相等的三个部分【数组】

首先判断数组所有元素之和能否被3整除,不能则返回false;所有元素之和/3就是我们3个子数组的目标和,因此定义左、右索引,从数组开头和结尾分别遍历数组,直到子数组和等于目标值时终止。判断左、右索引的大小关系,若l>r,说明不存在中间子数组或不能找到满足条件的左、右子数组,返回false,否则为true。class Solution { public boolean canTh...

2020-03-11 11:00:26 196

原创 leetcode 18. 四数之和【双指针】

在三数之和的基础上理解这题的设计思路不难,个人认为难点在于去重的处理。下面以数组[0,0,0,0,0,1,2,3,3,3]举例说明:第一层遍历的去重:当数字第一次等于0时,此时不应该判断去重,因为题目没有限制后面的三个数字不能重复,如果第一次等于0时去重,则后面的数字不能取到0。所以 nums[i] == nums[i-1] 的判断条件保证了在一连串的重复数字中,第一次取到该数字时不会去重。...

2020-03-11 08:40:49 97

原创 leetcode 13. 罗马数字转整数【字符串】

将字符串形式的罗马数字转换为整数形式的数字,通过观察可以发现,当表示较小数字的字母出现在表示较大数字的字母左侧时,结果需要减去较小字母表示的数字,而较小字母出现在右侧时,正常累加即可。因此可以在遍历中先判断上一个字母表示的数字和当前字母表示的数字的大小关系,然后进行计算。字母和数字的映射可以使用HashMap存储,也可以使用switch语句表示。class Solution { pub...

2020-03-10 10:28:18 70

原创 leetcode 322. 零钱兑换【动态规划】

方法1:建立一个动态规划数组,数组长度为总金额+1,对应的数组用于记录与数组下标相对应的总金额所需要的最少硬币数。class Solution { public int coinChange(int[] coins, int amount) { int[] dp = new int[amount +1]; Arrays.sort(coins); ...

2020-03-08 11:21:19 83

原创 leetcode 124. 二叉树中的最大路径和【DFS】

套用二叉树后序遍历的递归代码,计算某一节点左、右子树的最大路径和后,再与该节点数值相加得到该节点及其左右子树的最大路径和。难点在于如何返回上一层递归调用中,因为若该路径和不是最大路径和时,则表示该节点的左、右子树只有一个能向上一层传递。这里定义一个实例域记录每一层递归所产生的的最大路径和,因此递归函数在返回时只需要返回左、右子树中最大的路径和即可。class Solution { in...

2020-03-07 23:04:52 129

原创 leetcode 236. 二叉树的最近公共祖先【BFS】

递归思想, 对以root为根的(子)树进行查找p和q, 如果root == null || p || q 直接返回root表示对于当前树的查找已经完毕, 否则对左右子树进行查找, 根据左右子树的返回值判断:左右子树的返回值都不为null, 由于值唯一左右子树的返回值就是p和q, 此时root为LCA如果左右子树返回值只有一个不为null, 说明只有p或q存在于左或右子树中, 最先找到的那个节...

2020-03-07 20:02:47 151 1

原创 leetcode 面试题59 - II. 队列的最大值

方法1:维护一个数组对数据尽心入队和出队,需要取最大值时, 遍历数组寻找最大值,时间复杂度不符合O(1)。方法2:维护两个数组,一个数组用于实现数据的入队和出队,零一个数组为单调递减数组,即数组的首个元素最大,当有新入队数据时,将递减数组中比新数据小的元素都出队(这些小数据并不会对求最大值产生影响),并将新数据入队。class MaxQueue { //基础数组的初始化 ...

2020-03-07 17:19:24 96

原创 leetcode 面试题57 - II. 和为s的连续正数序列【双指针】

方法1:暴力法,从1~target/2遍历,判断被遍历数字之后的连续n个数字之和是否等于target,若等于,则在List中加入该数字序列组成的数组,若sum>target后,跳出本次循环,开始从下一个数字开始遍历。class Solution { public int[][] findContinuousSequence(int target) { List&l...

2020-03-06 15:29:08 96

原创 leetcode 215. 数组中的第K个最大元素【小顶堆】

方法1:排序后返回倒数第k个元素。利用小顶堆,构建k个元素的小顶堆,将数组中最大的k个数全部入堆,则堆顶元素即为答案。class Solution { public int findKthLargest(int[] nums, int k) { buildHeap(nums, k); for(int i=k; i<nums.length; i+...

2020-03-05 22:35:39 510 1

原创 leetcode 43.字符串相乘【字符串、数组】

方法1将num2中每个数字依次与num1相乘,得到num2.length()个字符串,然后再将这些数字求和即可。class Solution { public String multiply(String num1, String num2) { int len1 = num1.length(); int len2 = num2.length();...

2020-03-05 16:05:42 163

原创 leetcode 994.腐烂的橘子【BFS】

使用队列对矩阵进行广度优先搜索:建立Orange类保存每个腐烂橘子的节点信息,包括该节点腐烂所需要的分钟数。遍历矩阵,将腐烂的橘子放入队列;遍历队列,判断每个腐烂橘子上下左右的位置是否有新鲜橘子,有则将其腐烂病放入队列;遍历矩阵,判断是否还存在新鲜橘子,若存在则返回-1,否则返回minute。class Solution { class Orange{ int...

2020-03-04 14:07:14 177

Cglib3.3.0最新版jar包

Cglib最新版本的2个jar包,分别是cglib-3.3.0.jar和cglib-nodep-3.3.0.jar,压缩后上传,方便大家使用。

2020-06-03

空空如也

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

TA关注的人

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