Giả sử chúng ta có một danh sách chỉ có hai giá trị 1 và −1. Chúng ta phải tìm độ dài của danh sách con dài nhất có tổng bằng 0.
Vì vậy, nếu đầu vào là nums =[1, 1, −1, 1, 1, −1, 1, −1, 1, −1], thì đầu ra sẽ là 8, vì danh sách con dài nhất là [−1 , 1, 1, −1, 1, −1, 1, −1] có tổng bằng 0.
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
table:=một bản đồ trống mới
-
cs:=0, max_diff:=0
-
đối với tôi trong phạm vi từ 0 đến kích thước của nums - 1, thực hiện
-
cs:=cs + nums [i]
-
nếu cs giống 0 thì
-
max_diff:=tối đa i + 1 và max_diff
-
-
nếu cs trong bảng thì
-
max_diff:=tối đa của max_diff và (i - table [cs])
-
-
nếu không,
-
bảng [cs]:=i
-
-
-
trả về max_diff
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
class Solution:
def solve(self, nums):
table = {}
cs = 0
max_diff = 0
for i in range(len(nums)):
cs += nums[i]
if cs == 0:
max_diff = max(i + 1, max_diff)
if cs in table:
max_diff = max(max_diff, i − table[cs])
else:
table[cs] = i
return max_diff
ob = Solution()
nums = [1, 1, −1, 1, 1, −1, 1, −1, 1, −1]
print(ob.solve(nums)) Đầu vào
[1, 1, −1, 1, 1, −1, 1, −1, 1, −1]
Đầu ra
8