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

파이썬에서 주어진 목록에 피타고라스 삼중항이 있는지 확인하는 프로그램

<시간/>

nums라는 숫자 목록이 있다고 가정하고 a^2 + b^2 =c^2와 같은 세 개의 숫자, b, c가 있는지 확인해야 합니다.

따라서 입력이 [10, 2, 8, 5, 6]과 같으면 출력은 8^2 + 6^2 =64+36 =100 =10^2와 같이 True가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • tmp :=모든 숫자의 제곱을 내림차순으로 나열한 목록
  • tmp의 각 인덱스 i와 해당 숫자 n에 대해 다음을 수행합니다.
    • 기본:=n
    • 왼쪽 :=i+1, 오른쪽 :=tmp의 크기 -1
    • 왼쪽 <=오른쪽, do
      • t :=두 개의 목록 tmp[left] 및 tmp[right] 결합
      • t가 base와 같으면
        • 참 반환
      • 그렇지 않으면 t> 밑이면
        • 왼쪽 :=왼쪽 + 1
      • 그렇지 않으면
        • 오른쪽 :=오른쪽 - 1
  • 거짓을 반환

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

예시

class Solution:
   def solve(self, nums):
      tmp = sorted([n*n for n in nums], reverse = True)
      for i, n in enumerate(tmp):
         base = n
         left = i+1; right = len(tmp)-1
         while left <= right:
            t = tmp[left]+tmp[right]
            if t == base:
               return True
            elif t > base:
               left += 1
            else:
               right -= 1
      return False
ob = Solution()
print(ob.solve([10, 2, 8, 5, 6]))

입력

[10, 2, 8, 5, 6]

출력

True