好的解法其实是O(N),通过字典记录已经存在的长度,如果当前长度减去已经存在的长度是k,那么其实是说明从记录点后面开始到当前位置的和就是K。
class Solution:
def maxlenEqualK(self , arr , k ):
# write code here
n = len(arr)
res1 = 0
max_length = 0
for i in range(n):
if n - i < max_length:
return max_length
for j in range(i, n):
if i == j:
res1 = arr[i]
else:
res1 = res1 + arr[j]
if res1 == k:
if j-i+1 > max_length:
max_length = j-i+1
return max_length
空间换时间
## O(n)解决的办法,记录之前的和,如果这个和出现过,那么说明已后半部分为0
class Solution:
def maxlenEqualK(self , arr , k ):
# write code here
n = len(arr)
res1 = 0
max_length = 0
record = {}
for i in range(n):
res1 += arr[i]
if res1 == k:
if i+1 > max_length:
max_length = i + 1
else:
if res1 - k in record:
if i - record[res1-k] > max_length:
max_length = i - record[res1-k]
if res1 not in record:
record[res1] = i ##注意不能更新~
return max_length