ARTS打卡第三周
坚持做一件费脑子的事情很费劲。看看坚持三个月会有什么结果吧。
Algorithm:
剑指 Offer 26. 树的子结构 这一题结合二叉树的遍历和判断两个二叉树相等 的知识点,如果你不能看出这一点,说明你的基础还不够扎实。但是这一题有一点需要注意的地方:在判断两个树是否相等时,注意较小的那一棵树的左子树或者右子树可能是空的,要对这两个情况做判断。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public static boolean flag; public boolean isSubStructure(TreeNode A, TreeNode B) { flag=false; traversal(A, B); return flag; } public static void traversal(TreeNode root, TreeNode B){ if(root==null || B==null){ return; } if(root.val == B.val){ if(isSameTree(root, B)){ flag=true; } } traversal(root.left, B); traversal(root.right, B); } public static boolean isSameTree(TreeNode p, TreeNode q) { if(p==null && q==null){ return true; } if(p!=null && q!=null){ if(q.left==null && q.right==null){ return p.val==q.val; } if(q.left==null && q.right!=null){ return p.val==q.val && isSameTree(p.right, q.right); } if(q.left!=null && q.right==null){ return p.val==q.val && isSameTree(p.left, q.left); } return p.val==q.val && isSameTree(p.left, q.left) && isSameTree(p.right, q.right); } return false; } }
Review:
How Spring Boot Annotations Works? Spring Boot中经常用到注解,文章没有解释注解的原理,文章是Spring Boot注解的使用说明书,@RestController有些特别,它混合@Controller和@ResponseBody,这样的特点让controller里面的方法自动被@ResponseBody注解,意味着方法的返回值应该被直接序列化HTTP 响应体。
Tip:
在刷题和工作中会遇到把Java的List转为数组的情况,现在介绍3种方法:
- 遍历List并把元素放进数组。
- 使用Stream。数组的类型是引用类型。
import java.util.*; class test1 { public static void main(String[] a) { ArrayList<Integer> list = new ArrayList<>(); Random rand=new Random(); for(int i=0; i<10; i++){ list.add(rand.nextInt(20)); } Integer[] arr1; arr1=list.stream().toArray(Integer[]::new); System.out.println(Arrays.toString(arr1)); } }
- 使用List的toArray()方法,第一种是往toArray()里面传入数组,但是数组是引用类型;另一种是不向toArray()里面传参数,数组的类型是Object。
import java.util.*; class test1 { public static void main(String[] a) { ArrayList<Integer> list = new ArrayList<>(); Random rand=new Random(); for(int i=0; i<10; i++){ list.add(rand.nextInt(20)); } Integer[] arr1=new Integer[10]; list.toArray(arr1); Object[] arr2; arr2= list.toArray(); System.out.println(Arrays.toString(arr1)); System.out.println(Arrays.toString(arr2)); } }
Share:
我觉得盲目学习和用蛮力学习并延长学习时间是没有价值的。知道哪些知识不用学习比盲目地学习更省力。人的精力有限,一天能高效学习4个小时就很不错,剩下的时间用来处理不需要很大脑力地事情或者户外活动。媒体上经常喜欢流传某某学生“十分刻苦,一整天任务安排的满满当当”,我觉得99%的人做不到,人的注意力在一天之中是限量的,不可能持续高强度学习,当然有些人精力旺盛,可以持续高强度学习,但是我经过实践,发现自己的节奏更适合持续3~4小时集中精力攻克困难问题,剩下的时间就很低效。