สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และเราต้องการเลือกตัวเลขสองคู่จากนั้นจึงลดความแตกต่างที่แน่นอนระหว่างผลรวมของทั้งสองคู่นี้
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[3, 4, 5, 10, 7] ผลลัพธ์จะเป็น 1 เพราะเราสามารถเลือกคู่เหล่านี้ได้ (3 + 7) - (4 + 5) =1พี>
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:
- ระยะทาง :=รายการใหม่
- สำหรับฉันในช่วง 0 ถึงขนาดของ nums - 2 ทำ
- สำหรับ j ในช่วง i + 1 ถึงขนาดของ nums - 1 ทำ
- แทรกรายการ [|nums[i] - nums[j]| , i, j] เมื่อสิ้นสุดระยะทาง
- จัดเรียงรายการระยะทาง
- ตอบ :=1^9
- สำหรับฉันในช่วง 0 ถึงขนาดของระยะทาง - 2 ทำ
- [dist, i1, i2] :=ระยะทาง[i]
- j :=i + 1
- [dist2, i3, i4] :=ระยะทาง[j]
- ในขณะที่ j <ขนาดของระยะทางและองค์ประกอบใน (i1, i2, i3, i4) ไม่ซ้ำกัน ทำ
- [dist2, i3, i4] :=ระยะทาง[j]
- j :=j + 1
- หากองค์ประกอบใน (i1, i2, i3, i4) ไม่ซ้ำกัน ดังนั้น
- ans :=ขั้นต่ำของ ans และ (dist2 - dist)
- คืนสินค้า
- สำหรับ j ในช่วง i + 1 ถึงขนาดของ nums - 1 ทำ
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:
โค้ดตัวอย่าง
class Solution: def solve(self, nums): distances = [] for i in range(len(nums) - 1): for j in range(i + 1, len(nums)): distances.append((abs(nums[i] - nums[j]), i, j)) distances.sort() ans = 1e9 for i in range(len(distances) - 1): dist, i1, i2 = distances[i] j = i + 1 dist2, i3, i4 = distances[j] while j < len(distances) and len({i1, i2, i3, i4}) != 4: dist2, i3, i4 = distances[j] j += 1 if len({i1, i2, i3, i4}) == 4: ans = min(ans, dist2 - dist) return ans ob = Solution() nums = [3, 4, 5, 10, 7] print(ob.solve(nums))
อินพุต
[3, 4, 5, 10, 7]
ผลลัพธ์
1