- 博客(26)
- 收藏
- 关注
原创 降低时间复杂度的几种方法【持续更新】
降低时间复杂度的几种方法【持续更新】 LeetCode的许多题目都对时间复杂度有相应的要求,大家在刷题时遇到一道题可能有自己的解决方法,也确实可行,然而时间复杂度达不到要求也无法通过。这里给大家持续总结LeetCode中遇到的那些降低时间复杂度的方法。
2017-06-12 17:33:52 20554 1
原创 多因子排序
当需要对多因子进行排序时,可以构造下面这样的包装类,对List<YourObject>进行排序,假设排序因子都是Double类型的。如有其他需要,也可使用泛型。/** * 用于多因子优先级排序 * 要求List<YourObjectWrapper>的所有元素都是按照同样因子优先级顺序构造的scores */class YourObjectWrapper im...
2019-04-26 17:32:58 1684
原创 静态代理、动态代理、CGLIB
代理目的:扩展被代理对象的功能。参考:https://blog.csdn.net/briblue/article/details/73928350https://www.jianshu.com/p/6f6bb2f0ece9例如动态代理中的拦截器,拦截某个方法后,在该方法前后增加额外方法,扩展了其功能。静态代理动态代理CGLIB参考:https:/...
2018-08-14 10:49:15 157
原创 学习思维
非常感谢实习期间的一位师兄给予的耐心教导,从他那里继承来了学习思维的连环三问:1. 为什么要用这个东西(一种设计模式/一个类/一种框架/一种算法/一种数据结构/一种规范)?2. 去掉这个东西会有什么影响?3. 如果不用这个,我们可以拿什么来代替?举个例子:打印日志经常会同时返回errCode和errMessage,为什么两个都要呢?去掉其中某一个会有影响吗?要是不用...
2018-08-13 22:31:14 585
原创 自定义注解+实现类+AOP
以自定义注解实现缓存为例:在方法上添加注解,即可将方法名和入参(为key)、返回值(为value),存入缓存cache。1. 自定义注解定义注解中需要获取的自定义参数,以提供给实现类调用。2. 缓存实现类实现缓存相关的增删改查等。3. AOP代理实现AOP动态代理、拦截器,用Manager集中管理,并注册bean。...
2018-08-13 14:47:43 3377
原创 监听器模式
定义事件源生成事件并将其发送至一个或多个监听器; 监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。实现事件对象接口(监听器注册方法,事件相关方法) 事件源类implements事件对象接口(事件源状态,事件触发方法(1.改变事件源状态;2.调用监听器的事件触发处理方法),监听器注册方法) 事件监听器接口(事件触发处理方法(参数:事件对象))参...
2018-08-09 11:12:56 186
原创 回调
定义A类调用B类去解决问题,B类解决问题得到结果以后,调用A类中的方法(回调函数)进行结果的展示/后续处理;为了B类可以调用A类中的方法(回调函数),并且知道就是要调用该方法,就需要一个interface,A类继承这个interface,实现interface的方法(即回调函数),并在调用B类方法时传入这个interface,这样B类的方法就知道并可以要通过这个interface来调用A类...
2018-08-09 10:49:58 145
原创 Git相关
IDEA内部Terminal使用Git配置分支操作参考:https://blog.csdn.net/arkblue/article/details/9568249版本重置revert:回到上次git commit或git pull时的状态,丢弃这段时间的开发; git reset commitID 转到指定commit版本,再 git push –f,会删除指定commit版...
2018-08-09 10:36:22 112
原创 缓存
1. 主动写缓存与被动写缓存相对来说,被动写缓存对缓存一致性的保障更好。一般缓存一致性保障方法:补偿机制 定期全量或增量build 失效机制2. 自定义注解实现缓存由三部分组成,可参考 https://www.jianshu.com/p/9c2771b754881. 自定义注解public @interface SetCache {}public @inter...
2018-08-07 20:59:16 589
原创 DP 人生第一道Hard,不出意外没做出来(详细注释,安慰一下自己)
LeetCode 691. Stickers to Spell WordDP四大要素,需要仔细分析
2017-12-26 16:08:37 308
原创 DP O(n)遍历 + Binary Search = O(nlogn)
LeetCode 300. Longest Increasing Subsequence
2017-08-28 16:27:32 289
原创 广度优先遍历 之 LeetCode 542. 01 Matrix
广度优先遍历是层序遍历的推广。层序遍历需要使用普通队列,因此,对于广度优先遍历,使用普通队列也是一个不错的选择。
2017-07-27 16:35:31 311
原创 针对矩阵的一类动态规划处理
LeetCode动态规划题目中遇到两道矩阵题,一个是寻找子矩阵,一个是计算某个子矩阵的和。这里介绍一下他们的处理方法,记录思考.
2017-07-05 16:13:57 243
原创 延展问题=基本问题+特殊情况(延展问题=基本问题 分情况讨论)
对于一些在原问题基础上增加了一些条件,进而延展一个新问题的题目,往往可以视为基本问题加上特殊情况的处理。 先回顾一下之前有一篇博文提到的抢劫问题,是对一条线上的房子进行抢劫。 LeetCode 198题 You are a professional robber planning to rob houses along a street. Each house h...
2017-06-29 10:18:02 858
原创 01背包问题的扩展——二维费用 LeetCode 474
01背包问题二维费用变量。状态转移公式有所变化,如下: f[i][v][u]=max{f[i-1][v][u],f[i-1][v-c[i]][u-d[i]]+w[i]} 因此,在套用01背包问题优化空间复杂度后的代码时,需要补充增加一维的工作。
2017-06-26 17:58:59 918
原创 实际问题的算法抽象——动态规划中的01背包问题
LeetCode的许多题目都不会明确告诉你用哪一类算法进行求解,甚至可能都无须用复杂算法。然而能明确用哪一类算法解决问题,将对问题的解决提供事半功倍的效果。当然有些题目即使告诉你用哪一类算法,然而如何将该问题抽象成一个数学算法,也是需要锻炼的。这里结合LeetCode 494和416给大家做一点分析。数学抽象——LeetCode 494 You are given a list...
2017-06-23 17:51:26 623
原创 动态规划中 用O(n)时间遍历数组
在针对一些需要遍历一个数组,同时使用广义动态规划(即至少有一个狭义动态规划条件不满足)的方法中,如何不使用递归,并且只用O(n)时间遍历数组呢?
2017-06-13 17:32:13 509
原创 从 LeetCode 279 实践动态规划
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, r
2017-06-08 10:42:52 481 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人