Skip to content

Commit

Permalink
Merge branch 'master' of https://github.com/azl397985856/leetcode
Browse files Browse the repository at this point in the history
  • Loading branch information
robot committed Jan 3, 2023
2 parents 1cd0f2b + 8fa6cd2 commit 57e2986
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions problems/805.split-array-with-same-average.md
Original file line number Diff line number Diff line change
Expand Up @@ -113,26 +113,25 @@ class Solution(object):

if N == 1: return False

S1 = {A[0]} # 所有 A1 可能的和的集合
for i in range(1, N//2):
S1 = set() # 所有 B 可能的和的集合
for i in range(N//2):
# {a + A[i] for a in S1} 在之前选择的基础上选择 A[i] 的新集合
# {A[i]} 是仅选择 A[i] 的新集合
# S1 是不选择 A[i] 的集合
# | 是集合并操作
S1 = {a + A[i] for a in S1} | S1 | {A[i]}
if 0 in S1: return True

S2 = {A[-1]} # 所有 A2 可能的和的集合
for i in range(N//2, N-1):
S2 = set() # 所有 C 可能的和的集合
for i in range(N//2, N):
S2 = {a + A[i] for a in S2} | S2 | {A[i]}
if 0 in S2: return True
# 为了避免 B 选择了所有的 A,这样 C 就是空了,我们增加一个这样的判断
# 如果 S1 和 S2 都没有和为 0 的组合。那么我们就需要从 S1 和 S2 分别找一个 a 和 b,看其和是否能达到 0. 如果可以,说明也能满足题意
# 为了避免 B 或者 C 为空,我们增加一个这样的判断: (ha, -ha) != (sleft, sright)
sleft = sum(A[i] for i in range(N//2))
sright = sum(A[i] for i in range(N//2, N))

return any(-ha in S2 and (ha, -ha) != (sleft, sright) for ha in S1)


```

**复杂度分析**
Expand Down

0 comments on commit 57e2986

Please sign in to comment.