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에서 숫자 크기까지의 i에 대해

    • j :=i + 1

    • k :=숫자의 크기 - 1

    • 동안 j

      • s :=숫자[i] + 숫자[j] + 숫자[k]

      • s <=target이면

        • ans :=ans 및 target의 최소값 - s

        • j :=j + 1

      • 그렇지 않으면

        • ans :=ans와 s의 최소값 - target

        • 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