ARTS Week 5

本周分享了LeetCode的二叉树层次遍历问题的解决方案,利用队列实现层次遍历。此外,介绍了用于思考和记录的工具,如文本文件、在线工具Kinopio和笔记软件Joplin。还探讨了算术右移与逻辑右移在编程中的区别,强调了平时素材积累的重要性。
摘要由CSDN通过智能技术生成

Algorithm

本周的 LeetCode 题目为 102. 二叉树的层次遍历

题目简介:给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例如下:

   1
  / \
 2   3
/    /\
4   5  6
[[1],[2,3],[4,5,6]]

题目思路:层次遍历的基本思路,使用一个队列记录当前层,然后遍历,记录节点的值和其左右孩子。一个需要注意的地方:在遍历前获取队列的长度(即该层的长度)。

最终代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> ans = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            int length = queue.size();
            List<Integer> tmpArr = new ArrayList<>();
            for (int i = 0; i < length; i++) {
                TreeNode tmpNode = queue.poll();
                if (tmpNode != null) {
                    tmpArr.add(tmpNode.val);
                    queue.offer(tmpNode.left);
                    queue.offer(tmpNode.right);
                }
            }
            if (!tmpArr.isEmpty()) {
                ans.add(tmpArr);
            }
        }
        return ans;
    }
}

Review

本周 Review 的英文文章为:Tools for thinking

在文章中,作者介绍了几个他自己使用的记录思考的工具。具体可以分为两类,第一类是大的文件来记录,第二类是在线的网页工具如Kinopio、Joplin用来记录。

  1. 大的文本文件或者表格

创建一个文件/表格,这个表格就好比一个标签,你在这个文件里可以记录任何事情或内容,比如一个手机号码、要做的事情、发现不错的书籍或电影名称、要买的东西、临时的笔记等等。你可以通过在文件里记录内容来减轻大脑的任务,就像一个备忘录一般。可以定期整理这个文件的内容来发现需要长时间保存的内容。你可以使用任何文本编辑器用来记录,如记事本、Notepad++、VS Code、Vim 等等,需要注意的是你要及时保存这个文件以免它丢失信息。表格和文本文件类似,看你的需要了。

  1. Kinopio。Kinopio使用起来相当有趣,你可以访问其页面了解更多。

  2. Joplin。Joplin非常适用于关于特定主题的笔记,并将它们联系在一起,按标签和笔记本分组。看起来很像Evernote,但Joplin与Evernote不同之处在于,它支持Markdown和代码高亮,而且它是免费的。

Tip

算术右移 V.S. 逻辑右移

我们知道计算机表示有符号整数时,最开始的一位称为符号位,用来标识正负数。在算术右移中,左侧补0还是补1取决于原本的符号位;而在逻辑右移中,左侧永远是会补0。即在对负数进行移位操作时,需要想清楚要进行的是逻辑右移还是算术右移。

举例:-2 用 8 比特会被表示为 11111110,其符号位为1,那么进行一个算术右移后得到的结果是 11111111-1,而进行一次逻辑右移后得到的结果是 01111111 即 127。

在 Java 中, >> 运算符代表算术右移,而 >>> 运算符代表逻辑右移。示例代码如下:

public class Main {
    public static void main(String[] args) {
        int num1 = 2;
        System.out.println(num1 >> 2);  // 0
        System.out.println(num1 >>> 2); // 0

        int num2 = -2;
        System.out.println(num2 >> 2);  // -1
        System.out.println(num2 >>> 2); // 1073741823
    }
}

Share

注重平时积累。本周的 ARTS 是一次性写成的,但实际写起来并不是那么顺利,因为有不少时间花在了找素材上。因此这提醒我需要重视平时积累素材,一来不用再花时间来确定写什么,二来平时就准备好了内容,到时候再稍加整理即可发布,三来节省下的时间可以用来创作单独的文章。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值