LeetCode 525. Python3 O(n) 解 和 O(n^2)解
原题链接
中等
作者:
Gyp
,
2020-04-13 17:14:09
,
所有人可见
,
阅读 578
直观做法我用了 前缀和然后搜索(i,j) 看是否一样多,复杂度 $O(n^2)$ 显示超时
class Solution:
def findMaxLength(self, nums: List[int]) -> int:
n = len(nums)
t = [0 for i in range(n+1)]
for i in range(0,n):
t[i+1] = t[i] + nums[i]
k = min(n,n-t[n])
for l in range(2*k,-1,-2):
for i in range(0,n-l+1):
if (t[l+i]-t[i])*2 == l:
return l
return 0
同样的前缀和思路 加一个 dictionary记载第一次出现个同一个0 1间个数差的位置 复杂度$O(n)$
class Solution:
def findMaxLength(self, nums: List[int]) -> int:
d = {0:-1}
t, ans = 0, 0
for i in range(len(nums)):
t = t + 1 if nums[i] == 0 else t - 1
if t not in d:
d[t] = i
else:
ans = max(ans, i - d[t])
return ans