解题思路
这里还是归并排序,另建了一个数组,合并AB,最后再覆盖到A. 但是我想,其实也可以直接覆盖到A, 利用快慢指针法,两个指针指向A和B的最后一个数字,还有一个指针指向A的尾部,取更大的值赋给尾部,然后更新对应的指针。
解题思路
这里还是归并排序,另建了一个数组,合并AB,最后再覆盖到A. 但是我想,其实也可以直接覆盖到A, 利用快慢指针法,两个指针指向A和B的最后一个数字,还有一个指针指向A的尾部,取更大的值赋给尾部,然后更新对应的指针。
sort_s = str(sorted(s))
我想到的方法是字典统计字母出现次数(或者使用a-z长度的数组向量),但是这里直接排序转化成字符串重新比较,比较巧妙!
解题思路
还有一个解题思路是,从数组的右上角,即 0, col-1 处开始。 这个元素是这一行的最大值,是这一列的最小值
代码
注意这里函数传入 min_v, max_v 约束以 root 为起始的二叉树的数值范围要求。 不可以直接简单地递归判断 node.val 和 node.left.val 和 node.right.val
二叉搜索树特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。
这个是严格二叉搜索树的定义,不包含重复的数字!
if node.min > topNode.min:
这里维护栈内最小值的方式是,存储元素为结构体,结构体额外存储一个 min,表示“这个元素在栈顶时,栈内的最小值” 为什么不能使用一个单纯的 min_val 变量存储栈内最小值,是因为如果这个变量 pop 出来后,你需要重新找最小值。
不过看这个代码实现,我觉得额外使用一个 mins 栈,和 stack 等长也挺好的。
代码
这里 in-place 操作仍然需要标记所有需要置零的行和列。 只不过标记位置为 matrix 的第一行和第一列,遍历每个元素,如果为 0,那么就把对应行的第一列数字和对应列的第一行数字置零。 当然这样就没办法判断原本第一行和第一列是否需要置零了,所以额外使用两个 flag 标记一下原本是否要置零。
size - i - 1
这里其实是 size-1 - i, 因为 size 是长度,索引值从 0 开始,最大索引是 size-1
for i in range(len(self.ids))
这里通过 for 循环把所有 y 改成了 x 不过我还看到有实现直接 fa[find(i)] = find(j); 也就是只修改 father[y] = x,这样可能其他还有节点指向 y,没关系,下次 find 查询的时候路径压缩会更新为 x 的。
Lie Type ltype
Lie Type: ltype