10 Matching Annotations
  1. Nov 2024
    1. 解题思路

      这里还是归并排序,另建了一个数组,合并AB,最后再覆盖到A. 但是我想,其实也可以直接覆盖到A, 利用快慢指针法,两个指针指向A和B的最后一个数字,还有一个指针指向A的尾部,取更大的值赋给尾部,然后更新对应的指针。

    1. sort_s = str(sorted(s))

      我想到的方法是字典统计字母出现次数(或者使用a-z长度的数组向量),但是这里直接排序转化成字符串重新比较,比较巧妙!

    1. 代码

      注意这里函数传入 min_v, max_v 约束以 root 为起始的二叉树的数值范围要求。 不可以直接简单地递归判断 node.val 和 node.left.val 和 node.right.val

    2. 二叉搜索树特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。

      这个是严格二叉搜索树的定义,不包含重复的数字!

    1. if node.min > topNode.min:

      这里维护栈内最小值的方式是,存储元素为结构体,结构体额外存储一个 min,表示“这个元素在栈顶时,栈内的最小值” 为什么不能使用一个单纯的 min_val 变量存储栈内最小值,是因为如果这个变量 pop 出来后,你需要重新找最小值。

      不过看这个代码实现,我觉得额外使用一个 mins 栈,和 stack 等长也挺好的。

    1. 代码

      这里 in-place 操作仍然需要标记所有需要置零的行和列。 只不过标记位置为 matrix 的第一行和第一列,遍历每个元素,如果为 0,那么就把对应行的第一列数字和对应列的第一行数字置零。 当然这样就没办法判断原本第一行和第一列是否需要置零了,所以额外使用两个 flag 标记一下原本是否要置零。

    1. for i in range(len(self.ids))

      这里通过 for 循环把所有 y 改成了 x 不过我还看到有实现直接 fa[find(i)] = find(j); 也就是只修改 father[y] = x,这样可能其他还有节点指向 y,没关系,下次 find 查询的时候路径压缩会更新为 x 的。

  2. Jul 2024