โจทย์: ให้ 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