You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: problems/805.split-array-with-same-average.md
+48-47Lines changed: 48 additions & 47 deletions
Original file line number
Diff line number
Diff line change
@@ -34,14 +34,22 @@ A[i] 的数据范围为 [0, 10000].
34
34
35
35
实际上分出的**两个列表 B 和 C 的均值都等于列表 A 的均值**,这是本题的入手点。以下是证明:
36
36
37
+
令 B 的长度为 K,A 的长度为 N。 则有 sum(B)/K = sum(C)/(N-K)。
38
+
39
+
进而:
40
+
37
41
```
38
42
sum(B) * (N - K) = sum(C) * K
39
43
sum(B) * N = (sum(B) + sum(C)) * K
40
44
sum(B) / K = (sum(B) + sum(C)) / N
41
45
sum(B) / K = sum(A) / N
42
46
```
43
47
44
-
因此我们可以枚举所有的 A 的大小 i,相应地 B 的大小就是 n - i,其中 n 为数组 A 的大小。而由于**两个列表 B 和 C 的均值都等于列表 A 的均值**。因此可以提前计算出 A 的均值 avg,那么 A 的总和其实就是 i _ avg ,我们使用回溯找到一个和为 i _ avg 的组合,即可返回 true,否则返回 false。
48
+
因此我们可以枚举所有的 A 的大小 i,相应地 B 的大小就是 n - i,其中 n 为数组 A 的大小。
49
+
50
+
而由于**两个列表 B 和 C 的均值都等于列表 A 的均值**。因此可以提前计算出 A 的均值 avg,那么 A 的总和其实就是 i \* avg ,我们使用回溯找到一个和为 i \* avg 的组合,即可返回 true,否则返回 false。
0 commit comments