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

3파이썬의 합


숫자 배열이 있다고 가정합니다. 그것은 n개의 정수를 저장하고, 배열에는 + b + c =0과 같은 요소 a, b, c가 있습니다. 상황을 만족하는 배열에서 모든 고유한 삼중항을 찾습니다. 따라서 배열이 [-1,0,1,2,-1,-4]와 같으면 결과는 [[-1, 1, 0], [-1, -1, 2]]

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

  • 배열 번호를 정렬하고 배열 res를 정의합니다.
  • 0에서 숫자 길이 – 3까지 범위에 있는 i의 경우
    • i> 0이고 nums[i] =nums[i - 1]이면 다음 부분을 건너뛰고 계속
    • l :=i + 1 및 r :=숫자 길이 – 1
    • 동안 l
    • sum :=nums[i], nums[l] 및 nums[r]의 합
    • sum <0이면 l :=l + 1, 그렇지 않으면 sum> 0이면 r :=r – 1
    • 그렇지 않으면 nums[i], nums[l], nums[r]을 res 배열에 삽입
    • while l
    • l을 1 증가
  • 동안 r> 0 및 nums[r] =nums[r - 1]
    • r을 1 감소
  • l을 1 증가시키고 r을 1 감소
  • 반환 결과
  • 예제(파이썬)

    더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

    class Solution(object):
       def threeSum(self, nums):
          nums.sort()
          result = []
          for i in range(len(nums)-2):
             if i> 0 and nums[i] == nums[i-1]:
                continue
             l = i+1
             r = len(nums)-1
             while(l<r):
                sum = nums[i] + nums[l] + nums[r]
                if sum<0:
                   l+=1
                elif sum >0:
                   r-=1
                else:
                   result.append([nums[i],nums[l],nums[r]])
                   while l<len(nums)-1 and nums[l] == nums[l + 1] : l += 1
                   while r>0 and nums[r] == nums[r - 1]: r -= 1
                   l+=1
                   r-=1
          return result
    ob1 = Solution()
    print(ob1.threeSum([-1,0,1,2,-1,-4]))

    입력

    [-1,0,1,2,-1,-4]

    출력

    [[-1,-1,2],[-1,0,1]]