File tree Expand file tree Collapse file tree 1 file changed +6
-7
lines changed Expand file tree Collapse file tree 1 file changed +6
-7
lines changed Original file line number Diff line number Diff line change @@ -113,26 +113,25 @@ class Solution(object):
113113
114114 if N == 1 : return False
115115
116- S1 = {A[ 0 ]} # 所有 A1 可能的和的集合
117- for i in range (1 , N// 2 ):
116+ S1 = set () # 所有 B 可能的和的集合
117+ for i in range (N// 2 ):
118118 # {a + A[i] for a in S1} 在之前选择的基础上选择 A[i] 的新集合
119119 # {A[i]} 是仅选择 A[i] 的新集合
120120 # S1 是不选择 A[i] 的集合
121121 # | 是集合并操作
122122 S1 = {a + A[i] for a in S1} | S1 | {A[i]}
123123 if 0 in S1: return True
124124
125- S2 = {A[ - 1 ]} # 所有 A2 可能的和的集合
126- for i in range (N// 2 , N- 1 ):
125+ S2 = set () # 所有 C 可能的和的集合
126+ for i in range (N// 2 , N):
127127 S2 = {a + A[i] for a in S2} | S2 | {A[i]}
128128 if 0 in S2: return True
129- # 为了避免 B 选择了所有的 A,这样 C 就是空了,我们增加一个这样的判断
129+ # 如果 S1 和 S2 都没有和为 0 的组合。那么我们就需要从 S1 和 S2 分别找一个 a 和 b,看其和是否能达到 0. 如果可以,说明也能满足题意
130+ # 为了避免 B 或者 C 为空,我们增加一个这样的判断: (ha, -ha) != (sleft, sright)
130131 sleft = sum (A[i] for i in range (N// 2 ))
131132 sright = sum (A[i] for i in range (N// 2 , N))
132133
133134 return any (- ha in S2 and (ha, - ha) != (sleft, sright) for ha in S1)
134-
135-
136135```
137136
138137** 复杂度分析**
You can’t perform that action at this time.
0 commit comments