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

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


สมมติว่าเรามีอาร์เรย์ nums ที่เรียงในลำดับไม่ลดลง เราต้องสร้างอาร์เรย์ชื่อ result ขนาดเท่ากับ nums โดยที่ result[i] คือผลรวมของความต่างสัมบูรณ์ระหว่าง nums[i] และองค์ประกอบอื่นๆ ทั้งหมดในอาร์เรย์

เช่น ถ้าอินพุตคือ nums = [5,7,12] ผลลัพธ์จะเป็น [9, 7, 12] เพราะ:

  • |5-5| + |5-7| + |5-12| = 0+2+7 = 9
  • |7-5| + |7-7| + |7-12| = 2+0+5 = 7
  • |5-12| + |7-12| + |12-12| = 7+5+0 = 12

วิธีแก้ปัญหา

  • res := รายการใหม่
  • s := 0
  • n := ขนาดของ nums
  • สำหรับ i ในช่วง 1 ถึง n - 1: s := s + nums[i] - nums[0]
  • แทรก s ลงท้าย res
  • สำหรับ i ในช่วง 1 ถึง n - 1:
    • diff := nums[i] - nums[i-1]
    • s := s + diff*i
    • s := s - diff*(n-i)
    • แทรก s ลงท้าย res
  • return res

ตัวอย่าง

def solve(nums):
    res = []
    s = 0
    n = len(nums)
    for i in range(1,n):
        s += nums[i] - nums[0]
    res.append(s)
    for i in range(1,n):
        diff = nums[i] - nums[i-1]
        s += diff * i
        s -= diff * (n-i)
        res.append(s)
    return res

nums = [5,7,12]
print(solve(nums))

อินพุต

[5,7,12]

เอาต์พุต

[9, 7, 12]