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

Smallest Range I (ช่วงเล็กที่สุด) ใน Python

โจทย์: ให้ Array A และค่า K สำหรับแต่ละ A[i] สามารถบวก/ลบ x โดยที่ -K ≤ x ≤ K ได้ ต้องการให้ช่วง (Max - Min) ของ Array ใหม่ B น้อยที่สุด

Input/Output

Input:  A = [0, 10], K = 2
Output: 6
# B = [2, 8] (0+2, 10-2) → Max=8, Min=2, Diff=6

หลักการแก้ปัญหา

เพื่อลดช่วงให้น้อยที่สุด: ควรเพิ่มค่า Min ขึ้น K และลดค่า Max ลง K

  • New Max = Max(A) - K
  • New Min = Min(A) + K
  • Diff = New Max - New Min
  • ถ้า Diff < 0 → คืน 0 (ทับซ้อนกัน หมดช่วง)

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

class Solution:
    def smallestRangeI(self, A, K):
        MAX = max(A) - K
        MIN = min(A) + K
        difference = MAX - MIN
        
        if difference < 0:
            return 0
        else:
            return difference

ob = Solution()
print(ob.smallestRangeI([0, 10], 2))

ผลลัพธ์

6

One-liner Version

def smallestRangeI(self, A, K):
    return max(0, max(A) - min(A) - 2 * K)

อธิบาย: Max - Min - 2K = (Max-K) - (Min+K) = New Max - New Min