nums라는 숫자 목록이 있고 목표 값도 있다고 가정하면 합이 최대(target-1)인 nums에서 가장 큰 숫자 쌍의 합을 찾아야 합니다.
따라서 입력이 nums =[8, 3, 4, 9, 2] target =8과 같으면 8보다 작은 숫자의 가장 큰 쌍의 합이 4 + 3 =7이기 때문에 출력은 7이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 목록 번호 정렬
- p1 :=0
- p2 :=숫자 크기 - 1
- m :=-inf
- p1
- 숫자[p1] + 숫자[p2] <타겟이면
- m :=최대 m 및 (nums[p1] + nums[p2])
- p1 :=p1 + 1
- 그렇지 않으면
- p2 :=p2 - 1
- 숫자[p1] + 숫자[p2] <타겟이면
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
import math def solve(nums, target): nums.sort() p1 = 0 p2 = len(nums) - 1 m = -math.inf while p1 < p2: if nums[p1] + nums[p2] < target: m = max(m, nums[p1] + nums[p2]) p1 += 1 else: p2 -= 1 return m nums = [8, 3, 4, 9, 2] target = 8 print(solve(nums, target))
입력
[8, 3, 4, 9, 2], 8
출력
7