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

โปรแกรมหาจำนวนการเพิ่มน้อยที่สุดบนซับอาร์เรย์เพื่อสร้างอาร์เรย์เป้าหมายใน Python


สมมติว่าเรามีอาร์เรย์ชื่อ target ที่มีค่าบวก ตอนนี้พิจารณาอาร์เรย์ initial ขนาดเดียวกันเติมศูนย์ทั้งหมด เราต้องหาจำนวนการดำเนินการน้อยที่สุดที่จำเป็นเพื่อสร้างอาร์เรย์ target จาก initial หากเราทำการดำเนินการนี้: (เลือกซับอาร์เรย์ใดก็ได้จาก initial และเพิ่มค่าแต่ละตัวขึ้น 1)

เช่น ถ้าอินพุตคือ target = [2,3,4,3,2] ผลลัพธ์จะเป็น 4 เพราะเริ่มต้นอาร์เรย์คือ [0,0,0,0,0] รอบแรกเลือกซับอาร์เรย์ดัชนี 0 ถึง 4 เพิ่ม 1 กลายเป็น [1,1,1,1,1] รอบที่สองเลือก 0 ถึง 4 อีกครั้ง กลายเป็น [2,2,2,2,2] แล้วเลือกดัชนี 1 ถึง 3 เพิ่ม กลายเป็น [2,3,3,3,2] สุดท้ายเลือกดัชนี 2 ทำให้ได้ [2,3,4,3,2] เท่ากับ target

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

  • prev_num := 0
  • steps := 0
  • สำหรับแต่ละ val ใน target:
    • steps := steps + val - prev_num ถ้า val > prev_num มิฉะนั้น 0
    • prev_num := val
  • return steps

ตัวอย่าง

def solve(target):
    prev_num = 0
    steps = 0
    for val in target:
        steps += val - prev_num if val > prev_num else 0
        prev_num = val
    return steps

target = [2,3,4,3,2]
print(solve(target))

อินพุต

[2,3,4,3,2]

เอาต์พุต

4