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

โปรแกรมหาความต่างน้อยที่สุดระหว่างค่าสูงสุดและต่ำสุดหลังเปลี่ยนค่าได้ 3 ครั้งด้วย Python


สมมติว่าเรามีอาร์เรย์ nums เราสามารถเปลี่ยนค่าอะไรก็ได้ของอิลิเมนต์หนึ่งในหนึ่งครั้ง (move) เราต้องหาความต่างน้อยที่สุดระหว่างค่าสูงสุดและต่ำสุดของ nums หลังจากทำได้สูงสุด 3 ครั้ง

เช่น ถ้าข้อมูลเข้าเป็น nums = [3,7,2,12,16] ผลลัพธ์จะเป็น 1 เพราะเราสามารถทำให้อาร์เรย์กลายเป็น [1,1,0,1,1] ค่าสูงสุดคือ 1 ค่าต่ำสุดคือ 0 ความต่างคือ 1

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

  • ถ้าขนาด nums ≤ 4 ให้คืน 0 (เพราะสามารถทำให้ทุกค่าเท่ากันได้)
  • เรียงลำดับ nums จากน้อยไปมาก
  • กำหนด ans = infinity
  • วนลูป i จาก 0 ถึง 3:
    • mi = nums[i] (ค่าต่ำสุดที่อาจเหลือหลังลบ i ตัวแรก)
    • ma = nums[-(3-i+1)] (ค่าสูงสุดที่อาจเหลือหลังลบ 3-i ตัวท้าย)
    • ans = min(ans, ma - mi)
  • คืนค่า ans

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

def solve(nums):
    if len(nums) <= 4:
        return 0
    nums.sort()
    ans = float("inf")
    for i in range(4):
        mi = nums[i]
        ma = nums[-(3 - i + 1)]
        ans = min(ma - mi, ans)
    return ans

nums = [3,7,2,12,16]
print(solve(nums))

ข้อมูลเข้า

[3,7,2,12,16]

ข้อมูลออก

1