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

โปรแกรมค้นหาองค์ประกอบที่ไม่ซ้ำกันสามรายการจากรายการซึ่งผลรวมใกล้เคียงกับ k Python . มากที่สุด


สมมติว่าเรามีรายการตัวเลขที่เรียกว่า 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