สมมติว่าเรามีรายการตัวเลขที่เรียกว่า nums และอีกค่าหนึ่งคือ k เราต้องหาค่าที่ไม่ซ้ำกันสามค่าใน nums (a, b, c) เพื่อให้ |a + b + c − k| ถูกย่อให้เล็กสุดและส่งคืนส่วนต่างที่แน่นอน
ดังนั้น หากอินพุตมีค่าเท่ากับ nums =[2, 5, 25, 6] k =14 ผลลัพธ์จะเป็น 1 เหมือนกับว่าเราใช้ [2, 5, 6] จะทำให้เราเข้าใกล้ 14 มากที่สุด และผลต่างสัมบูรณ์คือ |13 − 14| =1.
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
เรียงเลขรายการ
-
ตอบ :=1^9
-
สำหรับฉันในช่วง 0 ถึงขนาดของ nums ทำ
-
เจ :=ผม + 1
-
k :=ขนาดของ nums − 1
-
ในขณะที่ j
-
s :=nums[i] + nums[j] + nums[k]
-
ถ้า s <=เป้าหมาย แล้ว
-
ans :=ขั้นต่ำของ ans และเป้าหมาย − s
-
เจ :=เจ + 1
-
-
มิฉะนั้น
-
ans :=ขั้นต่ำของ ans และ s - เป้าหมาย
-
k :=k − 1
-
-
-
-
กลับมาอีกครั้ง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class Solution: def solve(self, nums, target): nums.sort() ans = 1e9 for i in range(len(nums)): j = i + 1 k = len(nums) − 1 while j < k: s = nums[i] + nums[j] + nums[k] if s <= target: ans = min(ans, target - s) j += 1 else: ans = min(ans, s - target) k −= 1 return ans ob1 = Solution() nums = [2, 5, 25, 6] k = 14 print(ob1.solve(nums, k))
อินพุต
[2, 5, 25, 6], 14
ผลลัพธ์
1