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

โปรแกรมสร้างโครงสร้างข้อมูลรองรับการหาผลรวมช่วง (Range Sum) ใน Python

สมมติว่าเราต้องการพัฒนาโครงสร้างข้อมูลที่สร้างขึ้นพร้อมกับลิสต์จำนวนเต็ม และมีฟังก์ชันสำหรับหาผลรวมขององค์ประกอบจากดัชนี i ถึง j-1 อย่างมีประสิทธิภาพ มีฟังก์ชันสองฟังก์ชัน:

  • Constructor สร้างอินสแตนซ์ใหม่พร้อมอาร์เรย์จำนวนเต็ม
  • get_sum(i, j) คืนผลรวมของอิลีเมนต์อาร์เรย์จากดัชนีเริ่มต้น i ถึงดัชนีสิ้นสุด j-1

เช่น ถ้าอินพุตคือ array = [5,2,3,6,4,7,8,9,3,2] สร้างอ็อบเจกต์ obj เรียก obj.get_sum(1,5) และ obj.get_sum(4,8) ผลลัพธ์จะเป็น 15 และ 28 ตามลำดับ ช่วงแรกคือ [2,3,6,4] ผลรวม 15 ช่วงที่สองคือ [4,7,8,9] ผลรวม 28

ขั้นตอนการแก้ปัญหา

  1. กำหนด Constructor รับ array
  2. สร้าง sums เป็นลิสต์ เริ่มต้นด้วย 0
  3. วนลูปแต่ละ x ใน array ให้เพิ่ม (x + sums[-1]) เข้า sums
  4. เมธอด get_sum(i, j) คืน sums[j] - sums[i]

ตัวอย่างโค้ด

class RangeSum:
    def __init__(self, array):
        self.sums = [0]
        for x in array:
            self.sums.append(x + self.sums[-1])

    def get_sum(self, i, j):
        return self.sums[j] - self.sums[i]

array = [5,2,3,6,4,7,8,9,3,2]
obj = RangeSum(array)
print(obj.get_sum(1,5))
print(obj.get_sum(4,8))

อินพุต

[5,2,3,6,4,7,8,9,3,2] obj.get_sum(1,5) obj.get_sum(4,8)

เอาต์พุต

15 28