ARTS打卡第三周

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小时集中精力攻克困难问题,剩下的时间就很低效。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注