Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình tìm tổng các phần tử cách đều nhau trong một mảng bằng Python

Giả sử, có một mảng 'nums' kích thước n chứa các số nguyên dương. Chúng ta có một mảng 'truy vấn' khác chứa các cặp số nguyên (pi, qi). Đối với mọi truy vấn trong các truy vấn mảng, câu trả lời sẽ là tổng các số trong mảng nums [j] trong đó pi <=j

Vì vậy, nếu đầu vào giống như nums =[2, 3, 4, 5, 6, 7, 8, 9, 10], các truy vấn =[(2, 5), (7, 3), (6, 4)] , thì đầu ra sẽ là [13, 9, 8].

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • A:=nums

  • Q:=truy vấn

  • n:=độ dài của nums

  • M:=10 ^ 9 + 7

  • m:=giá trị nguyên của (n ^ 0,5) + 2

  • P:=một danh sách mới chứa danh sách A m lần

  • đối với tôi trong phạm vi từ 1 đến m, hãy làm

    • đối với j trong phạm vi n-1 đến -1, giảm 1, thực hiện

      • nếu tôi + j

        • P [i, j]:=(P [i, j] + P [i, i + j]) mô đun M

  • với mỗi giá trị b, k trong Q, thực hiện

    • nếu k

      • trả về [giá trị từ chỉ mục P [k, b]]

    • nếu không thì

      • return [sum (A [b to k]) modulo M]

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

def solve(A, Q):
   n, M = len(A), 10**9+7
   m = int(n**0.5)+2
   P = [A[:] for _ in range(m)]
   for i in range(1,m):
      for j in range(n-1,-1,-1):
         if i+j < n:
            P[i][j] = (P[i][j]+P[i][i+j]) % M
   return [P[k][b] if k < m else sum(A[b::k]) % M for b, k in Q]

print(solve([2, 3, 4, 5, 6, 7, 8, 9, 10], [(2, 5), (7, 3), (6, 4)]))

Đầu vào

[2, 3, 4, 5, 6, 7, 8, 9, 10], [(2, 5), (7, 3), (6, 4)]

Đầu ra

[13, 9, 8]