Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

파이썬에서 목표보다 작은 두 숫자의 합을 찾는 프로그램

<시간/>

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
  • 반환 m
  • 예시

    이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

    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