自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 NioEventLoop源码分析

前置芝士:需要知道Executor执行器的一些操作。(转载请联系)????文章目录DemoNioEventLoopGroup初始化过程线程创建器构造NioEventLoop线程选择器NioEventLoop启动过程NioEventLoop执行流程select()方法执行逻辑processSelectedKey()执行逻辑runAllTasks()执行逻辑面试相关Demopublic class NettyServer { int port; public NettyServer(

2021-01-03 00:42:31 190

原创 LC5454.统计全1子矩阵(矩阵统计)

问题解题技巧:矩阵枚举上下边界,用一个sum维护上下边界内每一列的列和,压成一维数组如果上下边界的差值diff等于这一列的列和sum,则这一列可以用来做矩阵由于会存在连续并排的列,因此还需要一个cnt统计连续列的个数,每多一个列加在连续块的后面则cnt需要+1,此时的cnt就是这个列贡献的全1子矩阵的个数,res需要加上这个列贡献的全1矩阵。class Solution { public int numSubmat(int[][] mat) { int n = mat

2020-07-05 21:39:04 684

原创 LC480.滑动窗口中位数(双堆+滑动窗口)

问题题解题目同数据流的中位数一样,都是使用双堆维护,详细可以看那一题。不同点在于,给数据流加了一个滑动窗口,数据需要从窗口中移除,因此只需要判断要被移除的元素是在哪个堆中即可,找到后删除,heap删除元素的时间复杂度为O(n)class Solution { public double[] medianSlidingWindow(int[] nums, int k) { PriorityQueue<Integer> maxHeap = new Priorit

2020-07-01 20:37:51 204

原创 LC295.数据流的中位数(双堆)

问题题解将窗口的元素分成两堆,使得一堆所有元素都>=中位数,另一堆所有元素都<=中位数。用两个优先队列维护这两个堆,maxHeap和minHeap规定maxHeap.size()-minHeap.size()==1或0,这样当两堆元素总个数为奇数时,maxHeap.peek()就是所需要的中位数,若为偶数,则中位数=maxHeap.peek()/2.0+minHeap.peek()/2.0;关键在于维持maxHeap.size()-minHeap.size()==1或0这个关系,每

2020-07-01 20:32:18 138

原创 LC18.四数之和(双指针)

问题解题题目解法同三数之和,双指针,枚举前面两个数,确定前两个数的和sum之后,在后面使用双指针找 -sum即可。步骤:先从小到大排序再使用指针a确定第一个数,注意要跳过后面出现的重复的数再枚举a后面的第二个数b,注意也要跳过后面出现的重复的数双指针枚举c和d,两边向中间枚举,如果大于target则d–,否则c++,注意也要跳过重复的数。需要注意的是a和b在跳过重复数的时候,不能采用nums[i + 1] == nums[i]的判断方式,因为这样会跳过第一个出现的值,而我们应该跳过

2020-06-29 19:15:34 137

原创 LC5450.满足条件的子序列数目(双指针)

问题解题看清题干,是最小值和最大值的和小于等于target,因此组合中的最大值和最小值之间的数应该在最大值和最小值之间,因此先对数组排序。排序之后对每一个最小值i,找到最大的且满足条件的值j。那么这个最小值和最大值之间的数的个数(j - i - 1)可以贡献2^(j - i)个组合。预处理2的幂次数组,防止溢出。class Solution { public int numSubseq(int[] nums, int target) { int mod = 10000

2020-06-28 21:07:02 119

原创 LC5449.检查数组对是否可以被k整除(map)

问题题解先对arr中的每个元素求余,余数相加为k即可配对被k整除需要特判的是余数为0的情况,余数为0的元素个数必须为偶数。(e % k + k) % k,取余公式class Solution { public boolean canArrange(int[] arr, int k) { int[] cnt = new int[k]; Arrays.fill(cnt, 0);//初始化 for(int e : arr){

2020-06-28 20:59:31 150

原创 LC1049.最后一块石头的重量II

问题题解考虑到最后合并的时候两堆越接近石头重量总和的一半,则差值最小由于是随机拿石头,因此转换为用一个背包重量为sum/2的背包去石头堆里找石头,尽量让背包装满以上分析后题目变成0-1背包问题class Solution { public int lastStoneWeightII(int[] stones) { int n = stones.length; int sum = 0; for(int stone : stones){

2020-06-28 20:45:52 518

原创 LC448/41.找到所有数组中消失的数字/缺失的第一个正数(替换/哈希)

问题以41为例题解题目的关键在于时间复杂度以及空间复杂度,可以借鉴448题,利用下标对下标对应元素的交换原地降低时间复杂度。整体思路:交换的目的为了让下标上的元素和下标一样,第一个不相等的下标即为第一个缺失的正数示例2来说,为了方便比较,先对每个元素做-1操作:2 3 -2 00 1 2 3第一次交换,由于0上方的元素不是0,因此,让2交换到下标为2的地方-2 3 2 0 0 1 2 3第二次交换,由于0上方的数字不在0~n之间,因此移动枚举

2020-06-27 22:59:42 188

原创 LC1293.网格中的最短路径(BFS)

问题解题题干中的求最短距离,先想到BFS,然后用BFS+队列实现又由于题干中需要维护一个花费值K,如果假设K为每个格子还能移除K个障碍物,则每个格子都可能有K个状态,用visited[i][j][k]表示点i,j格子还能消除k个障碍物的状态是否出现过。用step维护最短路径,类似于树的层序遍历,每次扩展一层,该层的step比上一层+1.如果扩展到的点为0,则剩下的消除数rest不变,否则-1,如果rest<0则跳过这个状态注意:这里需要维护三个状态,横纵坐标以及该点的消除数K,因此需

2020-06-27 22:45:20 378

原创 LC609.在系统中查找重复文件(map)

问题解题暴力遍历每一个文件,然后先保存根目录,然后找到该文件的文件名,组合成绝对路径保存在以文件内容为key的map中。class Solution { public List<List<String>> findDuplicate(String[] paths) { Map<String, List<String>> map = new HashMap(); for(String path : paths)

2020-06-25 14:18:30 132

原创 LC593.有效的正方形(数学)

问题解题思路一:找到最长的两条就是对角线,对角线垂直且相等以及对角线中点重合,确定一条,另两个点确定另外一条对角线。class Solution { //四个点六条边,最长的两条就是对角线,对角线垂直且相等以及对角线中点重合,确定一条,另两个点确定另外一条对角线 public boolean isSame(int[] p1, int[] p2){ return p1[0] == p2[0] && p1[1] == p2[1]; }

2020-06-25 14:08:04 130

原创 LC150.逆波兰表达式求值(栈)

问题解题提示已经给的很明显了用栈。。。class Solution { public int evalRPN(String[] tokens) { int n = tokens.length; Stack<Integer> stack = new Stack(); for(int i = 0; i < n; i ++){ //判断是否是数字,即判断该String最后一位是不是数字即可

2020-06-25 00:37:50 92

原创 LC139.单词拆分(DP)

问题解题状态表示:dp[i],表示s的第0~i位能否成功地单词拆分状态转移,枚举0~j,如果dp[j]能成功单词拆分且第 j+1 ~ i 位也在字典中,那么dp[i]也可以成功地单词拆分,因此状态转移方程:dp[i] = dp[j](from 0 to i - 1) && set.contains(s.substring(j,i))class Solution { public boolean wordBreak(String s, List<String>

2020-06-25 00:11:04 135

原创 LC224.基本计算器(辅助栈)

题目解题为了省去符号的倒序麻烦,使用两个栈来倒腾数字,这样最后的顺序就是顺序的,再用一个栈存储符号。每次遇到右括号执行以上的操作,即完成该括号对内的操作。为了能够存储多位整数和符号,用String来存储栈内元素。class Solution { public int calculate(String s) { s = "("+s+")"; Stack<String> stack = new Stack(); for(int

2020-06-24 23:53:53 127

转载 【转载】启动tomcat报错代理抛出异常

转载:https://www.cnblogs.com/xdp-gacl/p/5288399.html错误:代理抛出异常错误: java.rmi.server.ExportException: Port already in use错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in

2020-06-23 22:19:13 475

原创 Java并发-锁降级

锁降级中读锁的获取是否必要?锁降级的过程概括为在把持住写锁的过程获取读锁,然后释放写锁。为什么一定要获取读锁?我的理解:书中提到,为了保证数据的可见性,这里的可见性是对持有写锁的线程来说,如果提前释放了写锁,那么其他线程可能会获取到变量的写锁并更新值,这样自己对该变量的更新就无从可知了,而根据锁降级的顺序,获取写锁,在对变量的更新后再获取读锁,就可以知道对该变量的更新了。参考大佬的理解:首先写锁是独占的,读锁是共享的,然后读写锁是线程间互斥的,锁降级的前提是所有线程都希望对数据变化

2020-06-10 00:17:08 156

原创 解决JDBC连接MySQL时插入中文字符出现乱码

问题MySQL的status(修改之后):修改之前:之前用网上的方法,再URL之后插入useUnicode=true&characterEncoding=UTF-8但是我要插入的表以及数据都是UTF-8的,所以加上后仍然乱码解决方法先关闭MySQL服务然后打开my.in,修改字符编码最后再插入中文字符就可以显示了...

2020-04-25 23:47:22 251 2

原创 JAVA核心技术 第五章笔记

继承置换法则:程序中出现超类对象的任何地方都可以用子类对象置换最好将类中的域标记为private,方法标记为public子类可以访问超类被声明为protected的域1)仅对本类可见——private2)对所有类可见——public3)对本包和所有子类可见——protected4)对本包可见——默认(很遗憾),不需要修饰符Object是Java所有类的始祖(根类),没有明确指出超...

2019-11-28 14:42:25 174 1

原创 C++ Primer 动态内存

动态内存动态内存与智能指针shared_ptr类动态数组动态内存与智能指针静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量栈内存用来保存定义在函数内的非static对象除了静态内存和栈内存,程序还有一个内存池称为自由空间或者堆(heap),用来存储动态分配的对象,这些对象的生存期由程序控制,必须显式地销毁在C++中,管理动态内存使用一对运算符:n...

2019-11-24 12:43:12 137 1

原创 C++ Primer 读书笔记 Day Two

Day Two第三章 字符串、向量和数组标准库类型string标准库类型vector迭代器数组第四章 表达式第三章 字符串、向量和数组头文件不应该包含命名空间的using声明,头文件的内容会拷贝到所有引用它的文件中去,若使用using声明可能会在别的文件中造成名字冲突标准库类型stringstring s3("value");等同于string s3 = "value";s3是“va...

2019-11-11 20:48:19 194 1

原创 C++ Primer 读书笔记 Day One

目录第一篇新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入第一篇你好! 这是你第一次使用 Markdown编...

2019-11-09 14:15:48 139 1

空空如也

空空如也

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

TA关注的人

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