摘要:装饰者模式:动态将责任附加到对象上。若要扩展功能,装饰者提供了比集成更有弹性的替代方案。 原则:封装变化;多用组合,少用继承;针对接口编程,不针对实现编程;为交互对象之间的松耦合设计而努力;对扩展开放,对修改关闭。 Beverage是抽象基类,是被装饰者,getDescription()有基本实现,
阅读全文
摘要:题目链接 题目大意:找出n的全排列中的第k个排列。 法一:DFS,遍历前k个排列,输出,超时。代码如下: 1 public String getPermutation(int n, int k) { 2 List<Integer> tmp = new ArrayList<Integer>(); 3
阅读全文
摘要:题目链接 题目大意:输入十进制数组,组成一个数,在最末位+1,然后输出最后结果。例子如下: 法一:直接用类似大数加法的做法,最末位+1,然后输出最后结果,要注意的是,最后可能有进位,比如999的情况。代码如下(耗时1ms): 1 public int[] plusOne(int[] digits)
阅读全文
摘要:观察者模式:定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 原则:封装变化;多用组合,少用继承;针对接口编程,不针对实现编程;为交互对象之间的松耦合设计而努力。 Subject是被观察者接口,WeatherData是真正的被观察者实现类,Observer是观
阅读全文
摘要:第一题AC,注意点:输入是long类型,不能用BufferedReader,不然很麻烦: 1 public class Main { 2 3 public static void main(String[] args) throws IOException { 4 Scanner in = new
阅读全文
摘要:策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 原则:封装变化;多用组合,少用继承;针对接口编程,不针对实现编程。 上图是经典例子 小鸭子的uml图,由于要实现多种类型的鸭子,有的鸭子会飞,有的不会飞,有的鸭子会叫,有的不会叫,所以将Duck作
阅读全文
摘要:无状态对象一定是线程安全的。即无共享变量。 提高需求:统计已处理请求数量。这样就会产生共享状态,需要考虑线程安全。 方法一:普通++i。非线程安全。 方法二:利用线程安全类AtomicLong来管理类的状态。将复合操作++i转变为原子操作,保证线程安全性。 提高需求:将最近的计算结果缓存起来,当两个
阅读全文
摘要:schedule方法: 在固定延迟执行中,根据前一次执行的实际执行时间来安排每次执行。如果由于任何原因(如垃圾回收或其他后台活动)而延迟了某次执行,则后续执行也将被延迟。从长期来看,执行的频率一般要稍慢于指定周期的倒数(假定 Object.wait(long) 所依靠的系统时钟是准确的)。 固定延迟
阅读全文
摘要:ThreadLoacl类:解决变量在不同线程间的隔离性,即不同线程拥有自己的值,不同线程中的值是可以放入ThreadLocal类中进行保存的。为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。这个类使线程中的某个值与保存值的对象关联起
阅读全文
摘要:2018.4.21 进行了初赛 初赛的准备过程不长,前前后后也就三四天时间吧,云平台上的视频都没来得及看完,只看了“基础平台”一部分,“微服务”,“大数据”,然后其他的就都是看的文档了,包括云平台上的文档和往届提供的文档,其中还花了一天的时间刷了一下群里提供的hcna相关的题目(感觉并没有什么用),
阅读全文
摘要:题目链接 题目大意:翻转单链表。要求用递归和非递归两种方法。 法一:非递归。直接对原单链表进行循环操作,且不新开辟空间,用头插法即可。代码如下(耗时0ms): 1 public ListNode reverseList(ListNode head) { 2 if(head == null) { 3
阅读全文
摘要:题目链接 题目大意:中序遍历二叉树。先序见144,后序见145。 法一:DFS,没啥说的,就是模板DFS。代码如下(耗时1ms): 1 public List<Integer> inorderTraversal(TreeNode root) { 2 List<Integer> res = new A
阅读全文
摘要:题目链接 题目大意:根据中序和后序构建二叉树。 法一:与105类似,只是这里是根据后序来确定根节点。代码如下(耗时15ms): 1 public TreeNode buildTree(int[] inorder, int[] postorder) { 2 if(postorder.length ==
阅读全文
摘要:题目链接 题目大意:根据先序遍历和中序遍历构造二叉树。 法一:DFS。根据模拟步骤,直接从先序和中序数组中找值然后加入二叉树中,即先从先序数组中确定根结点,然后再去中序数组中确定左子树和右子树的长度,然后根据左子树和右子树的长度,去划分先序数组和中序数组,确定左子树和右子树。代码如下(耗时15ms)
阅读全文
摘要:题目链接 求解二叉树的深度,延伸可见leetcode110题。 法一:dfs。 1 private int TreeDepth(TreeNode root) { 2 if(root == null) { 3 return 0; 4 } 5 int l = TreeDepth(root.left);
阅读全文
摘要:题目链接 题目大意:判断一个二叉树是否是平衡二叉树。 法一:dfs。利用求解二叉树的高度延伸,先计算左子树的高度,再计算右子树的高度,然后两者进行比较。o(nlgn)。代码如下(耗时4ms): 1 public boolean isBalanced(TreeNode root) { 2 if(roo
阅读全文
摘要:注意点: 1)采用4个空格的缩进。 2)不要粘贴复制。 3)大小写敏感。 数据类型: 1)整型。无大小限制。不可变。可作为key加入dict和set中 2)浮点型。无大小限制,超过范围则为inf(无限大)。 3)字符串。转为整型用int()。不可变。可作为key加入dict和set中 4)布尔值。可
阅读全文
摘要:题目链接 题目大意:二叉树层序z字型的方式打印输出,即奇数行正常打印,偶数行倒序打印。例子如下: 法一:利用102的层序遍历,然后用Collections.reverse(list),在偶数行的时候将list翻转即可。代码如下(耗时2ms): 1 public List<List<Integer>>
阅读全文
摘要:题目链接 题目大意:将一个给定字符串转换成z字型,如下所示,给出z字型的行数,然后排成z字型,再按行输出结果。 法一(借鉴):代码如下(耗时59ms): 1 public String convert(String s, int numRows) { 2 if(numRows <= 1) { 3 r
阅读全文
摘要:题目链接 题目大意:打印二叉树的层序遍历。 法一:见116的利用队列的层序遍历法的第二种解法。代码如下(耗时3ms): 1 public List<List<Integer>> levelOrder(TreeNode root) { 2 List<List<Integer>> res = new A
阅读全文
摘要:interrupted():测试当前线程【运行此方法的当前线程】是否已经是中断状态,执行后具有将状态标志清除为false的功能。 isInterrupted():测试线程对象是否已经是中断状态,但不清除状态标志。 interrupted()的例子: 从上可以看出thread.interrupted(
阅读全文