五一放假没有出门,看着各种人挤人,车挤车,我心甚慰🤣🤣。这周的打卡内容主要是一道二叉树遍历题目,数据库方面是一道NOT IN关键字的题目,以及 REVIEW 一篇 RxJava 的文章。

Algorithm

题目描述

Given a binary tree, return the inorder traversal of its nodes’ values.

Example:

> Input: [1,null,2,3]
> 1
> \
> 2
> /
> 3
>
> Output: [1,3,2]
>

二叉树的遍历问题,最经典的方法就是递归了。

Java

public List<Integer> inorderTraversal(TreeNode root) {
if (root == null) {
return new ArrayList<>();
}
List<Integer> res = new ArrayList<>(inorderTraversal(root.left));
res.add(root.val);
res.addAll(inorderTraversal(root.right));
return res;
}

Python

def inorderTraversal(self, root: TreeNode) -> List[int]:
if not root:
return []
res = []
res.extend(self.inorderTraversal(root.left))
res.append(root.val)
res.extend(self.inorderTraversal(root.right))
return res
Runtime Memory Language
36 ms 13.1 MB python
1 ms 36.1 MB java

Database

596. Classes More Than 5 Students

There is a table courses with columns: student and class

Please list out all classes which have more than or equal to 5 students.

Note:
The students should not be counted duplicate in each course.

SELECT 
class
FROM
(SELECT
class, COUNT(DISTINCT(student)) AS num
FROM courses
GROUP BY class) AS tmp
WHERE
num >= 5

主要用到了NOT IN关键字。

Review

本周接着看了RxJava系列的文章中的第二篇。主要讲述了 Observable传递过程中的相关操作:

  • Buffer:Observable.buffer(int num)方法,会周期性的从 Obserable 中取出 num 个数的数据或者事件,而不是一个接一个的传递;
  • Map:该方法是对每一个传递的数据或者事件进行处理,处理完毕之后再进行向下传递;
  • FlatMap:该方法返回的还是一个 Observable 对象,是对原来传递的数据进行处理,返回一个对应的 Observable 对象(主要用于对元素顺序不关注的情况);
  • SwitchMap: 返回原始 Observable 对象传递数据中最后的一项 ;
  • ConcatMap:和 flatMap 有点类似;
  • GroupBy:将原始 Observable 对象传递的数据按某一 key 进行分类,将分类之后的数据进行传递(apply方法返回为 true 的时候该数据或事件才会进行传递);
  • Scan:对传递的参数进行处理,但是该参数不仅仅指当前传递的,还包括以前传递的。

Exploring RxJava in Android — Operators for Transforming Observables

Tips

  1. python中给list一次添加多个元素时使用方法extend()

    list1 = [1,2,3]
    list2 = [2,3,4]
    list1.extend(list2)
    # list1 is [1,2,3,2,3,4]
  2. python中读取一个文件的所有内容除了file.readlines()方法,还可以使用file.read()方法;

  3. NinePatchDrawable 在给 background 设置 bounds 之后,下次 draw 时 bottom 会变小,导致看起来会闪一下,目前想到的解决办法就是在原来背景的基础上通过设置着色达到改变背景的目的。

Share

python 内容较多的文件内容读取方式比较:https://www.cnblogs.com/6tian/p/5886284.html