中级提升-1-P19

绳子覆盖数组节点(窗口不回退)

image.png
思路:大于等于某个值的最左位置。
右边界为截止节点,判断左边的位置数。
N*logN
image.png
思路:滑动窗口。左边界为开始节点。
O(N)
image.png

6/8袋子买苹果(打表法)

特点:Input -> Int, output -> Int
image.png

剩余苹果大于24决定无法搞定
image.png
image.png
打表法:
image.png

先/后手吃草问题(打表法)

打表法:
image.png
递归体:子过程的“后手” == 母过程的“先”手
image.png
防溢出:
image.png
image.png

RG颜色染色(预处理数组技巧)

image.png
思路:左侧从0开始不断扩大,判断左右侧要多少个染色。
image.png

image.png

思路:预处理。arr[0..i] 有多少个 R,arr[i..N-1] 有多少个G。
左侧都是 G,右侧都是 R。
image.png
image.png

边框全为1的最大正方形(数组预处理)

image.png
image.png
思路:row-col-border 确定唯一的正方形。确定正方形后又需要四个并列的for循环判断四条边的值是否全为1,此时验证四条边可以用数组预处理。
image.png
right数组定义:每一行从右往左,包含自身,有多少个连续的1。
down数组定义:每一列从下往上,包含自身,有多少个连续的1。
image.png
验证三个点,四条边右侧/下侧为1的数量。
image.png
image.png

随机数生成器加工

image.png
思路:1~5实现0~1的随机发生器,然后按位运算实现0~6的随机发生器,最后返回值加1。
0~6 用二进制表示最多需要3个位置。
image.png
a~b 等概率加工成 c~d 等概率
image.png
p 概率 0,1-p 概率 1 加工成 0~1 等概率
image.png

中级提升-2-P20

n节点构成二叉树数量

image.png
image.png

  1. leftNum <= n - 1

image.png
image.png

完整括号字符串

思路:

  • 先解决一个括号字符串是否是完整字符串

image.png
判断一个字符串是否是完整字符的标准:(一次遍历,遇到 ‘(‘ 时 cnt++,遇到 ‘)’ 时 cnt—。)

  • cnt 在遍历过程中不能小于0;
  • 遍历结束是 cnt 必须等于 0。

image.png
image.png
image.png

数组差值k的去重数字对

image.png
思路:

  • 哈希表。

image.png

集合元素转移magic操作

image.png
avg(A) == avg(B)。都不能拿。
image.png
avg(A) < avg(B),不能从 A 拿到 B。
image.png
avg(A) > avg(B),从 A 中可以拿到 B,拿的元素 avg(B) < x < avg(A)。
Q:如果可以拿的元素有多个,应该怎么选?(拿最小的)
image.png
从 A 中拿满足要求最小的元素到 B,使 avg(A) 涨幅尽可能,avg(B) 涨幅尽可能小,这样可进行 magic 操作的次数会更多。
image.png
image.png
image.png
image.png
image.png

中级提升-3-P21

image.png