Alive
Alive
``` // 处理情况 3 // 获得右子树最小的节点 TreeNode minNode = getMin(root.right); // 删除右子树最小的节点 root.right = deleteNode(root.right, minNode.val); // 用右子树最小的节点替换 root 节点 root.val = minNode.val; ``` 删除右子树最小节点是否可以和查找结合起来,最小节点一定是最左的叶子节点,`getMin` 返回其父节点,删除操作仅需将 `partMinNode.left = null` 就行了吧
直接生成一个新的 `sz` 长度的数组非不在黑名单中的数字,空间换时间,简单粗暴。
这里的原数组 `nums` 对应的就是前缀和数组 `prefixSum`,差分数组 `diff` 对应的就是前缀和中的原数组 `nums`。 因此对于假前缀和数组第 `[i,j]` 位的加减操作,就可以理解为对原数组第 `i` 位加减某个数,第 `j+1` 位进行相反操作,就可以使前缀和数组表现为第 `[i, j]` 位同时加减某个数
有个地方没想明白, `lower preSum[i]` ,那 `[start, end)` 应该也有可能在左侧区间吧?为啥 `start` 还是从 `mid+1` 开始的
讲的很好,点个赞!另外有两个格式的小问题, - 1. 排队(元素可查不可复选)解法代码中,`backtrack` 函数调用参数数量不一致 ``` List res = new LinkedList(); LinkedList track = new LinkedList(); boolean[] used; public List permuteUnique(int[] nums) { ... // 调用是传了两个参数 backtrack(nums, track); ... }...