Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาผลรวมขององค์ประกอบที่เว้นระยะเท่ากันในอาร์เรย์ใน Python


สมมติว่ามีอาร์เรย์ 'nums' ขนาด n ที่มีจำนวนเต็มบวก เรามี 'แบบสอบถาม' อาร์เรย์อื่นที่มีคู่จำนวนเต็ม (pi, qi) สำหรับทุกการสืบค้นในการสืบค้นอาร์เรย์ คำตอบจะเป็นผลรวมของตัวเลขในอาร์เรย์ nums[j] โดยที่ pi <=j

ดังนั้น หากอินพุตเป็น nums =[2, 3, 4, 5, 6, 7, 8, 9, 10], การสืบค้น =[(2, 5), (7, 3), (6, 4)] จากนั้นผลลัพธ์จะเป็น [13, 9, 8]

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • A :=นับ

  • ถาม :=คำถาม

  • n :=ความยาวของ nums

  • ม :=10^9 + 7

  • m :=ค่าจำนวนเต็มของ (n ^ 0.5) + 2

  • P :=รายการใหม่ที่มีรายการ A m ครั้ง

  • สำหรับผมอยู่ในช่วง 1 ถึง m ทำ

    • สำหรับ j ในช่วง n-1 ถึง -1 ลดลง 1 ทำ

      • ถ้า i+j

        • P[i, j] :=(P[i, j]+P[i, i+j]) โมดูโล M

  • สำหรับแต่ละค่า b, k ใน Q ทำ

    • ถ้า k

      • ส่งกลับ [ค่าจากดัชนี P[k, b]]

    • อย่างอื่น

      • ส่งคืน [sum(A[b to k]) modulo M]

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

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

อินพุต

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

ผลลัพธ์

[13, 9, 8]