Cho danh sách nums. Tìm chỉ số nhỏ nhất i sao cho tổng các phần tử bên trái i bằng tổng các phần tử bên phải i. Nếu không có, trả về -1.
Ví dụ: nums = [8,2,3,6,5,2,5,9,1,2] → kết quả 4. Trái: [8,2,3,6]=19, Phải: [2,5,9,1,2]=19.
Thuật toán giải quyết (O(n))
- Tính tổng toàn mảng:
r = sum(nums) - Khởi tạo
l = 0 - Duyệt từng
(i, x):r -= x(bỏ phần tử hiện tại khỏi bên phải)- Nếu
r == l: trả vềi l += x(thêm phần tử hiện tại vào bên trái)
- Trả về -1 nếu không tìm thấy
Ví dụ minh họa
def solve(nums):
r = sum(nums)
l = 0
for i, x in enumerate(nums):
r -= x
if r == l:
return i
l += x
return -1
nums = [8,2,3,6,5,2,5,9,1,2]
print(solve(nums))
Đầu vào
[8,2,3,6,5,2,5,9,1,2]
Đầu ra
4