Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình tìm chỉ số mà tổng bên trái và bên phải bằng nhau trong Python

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))

  1. Tính tổng toàn mảng: r = sum(nums)
  2. Khởi tạo l = 0
  3. 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)
  4. 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