숫자 배열이 있다고 가정합니다. 그것은 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]]