Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크
배열이 주어졌습니다. 물가
어디 가격[i]
은 주어진 주식의 가격이다. 나는 일
낮.
달성할 수 있는 최대 이익을 찾아보세요. 최대 2개의 거래.
메모: 동시에 여러 거래에 참여할 수 없습니다(즉, 주식을 다시 구매하기 전에 반드시 해당 주식을 판매해야 합니다).
예시 1:
입력: 가격 = [3,3,5,0,0,3,1,4] 산출: 6 설명: 4일째 매수(가격 = 0), 6일째 매도(가격 = 3), 이익 = 3-0 = 3. 그런 다음 7일째 매수(가격 = 1), 8일째 매도(가격 = 4), 이익 = 4-1 = 3.
예 2:
입력: 가격 = [1,2,3,4,5] 산출: 4 설명: 1일차 매수(가격 = 1), 5일차 매도(가격 = 5), 이익 = 5-1 = 4. 참여 중이므로 1일차에 구매하고 2일차에 구매하고 나중에 판매할 수는 없습니다. 동시에 여러 거래를 해야 합니다. 다시 구매하기 전에 판매해야 합니다.
예시 3:
입력: 가격 = [7,6,4,3,1] 산출: 0 설명: 이 경우에는 거래가 이루어지지 않습니다. 즉, 최대 이익 = 0입니다.
제약:
1 <= 가격.길이 <= 10 5
0 <= 가격[i] <= 10 5
파이썬
# 시간 복잡도: O(n^2) # 공간 완전성: O(1) 입력 가져오기 목록 클래스 솔루션: def threeSumSmaller(self, nums: List[int], target: int) -> int: result = 0 nums. sort() for i in range(len(nums) - 1): 결과 += self.twoSumSmaller(nums, i + 1, target - nums[i]) 반환 결과 def twoSumSmaller(self, nums: List[int], startIdx: int, target: int) -> int: left = startIdx right = len(nums) - 1 결과 = 0 while left < right: if nums[left] + nums[right] < target: result += right - left 왼쪽 += 1 else: 오른쪽 -= 1 반환 결과 nums = [-2, 0, 1, 3] target = 2 print(Solution(). threeSumSmaller(nums, target))