| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- English
- 영어공부
- 리얼 클래스
- realclass
- 뭐든
- 미드시청
- Problem Solving
- 괜찮음
- 개발자
- 30분
- leetcode
- 10분
- FIT XR
- 월간
- 매일
- Writing
- 사이드
- 링피트
- 읽기
- 스탭퍼
- 잡생각
- 영어원서읽기
- 쓰릴오브파이트
- 만화도
- 3줄정리
- 프로젝트
- 운동
- 화상영어
- 파비최
- Daily Challenge
Archives
- Today
- Total
파비의 매일매일 공부기록
2023.01.18 Today's Challenge 본문
https://leetcode.com/problems/maximum-sum-circular-subarray/
Maximum Sum Circular Subarray - LeetCode
Maximum Sum Circular Subarray - Given a circular integer array nums of length n, return the maximum possible sum of a non-empty subarray of nums. A circular array means the end of the array connects to the beginning of the array. Formally, the next element
leetcode.com
일단 아이디어는 다음과 같다.
1. index 1부터 n-1까지 진행하면서 누적합을 구해 놓는다. 그러면서 max 값도 같이 저장해놓음.
2. 누적합 리스트를 다시 index 1부터 n-1까지 진행하면서 index 의 값을 빼면서 현재 max랑 비교해서 업데이트 한다.
틀렸다. 한 30분 트러블 슈팅 했는데 안되서 그냥 솔루션 보고 품.
결론은 DP로 푸는거였음 =_=
class Solution:
def maxSubarraySumCircular(self, nums: List[int]) -> int:
s = sum(nums)
dp = [[0,0] for _ in range(len(nums))]
dp[0][0] = nums[0]
res = nums[0]
for i in range(1, len(nums)):
dp[i][0] = max(dp[i-1][0] + nums[i], nums[i])
dp[i][1] = min(dp[i-1][1] + nums[i], nums[i])
res = max(res, dp[i][0], s - dp[i][1])
return res반응형
'Problem Solving > LeetCode' 카테고리의 다른 글
| 2023.01.20 Today's Challenge (0) | 2023.01.20 |
|---|---|
| 2023.01.19 Today's Challenge (0) | 2023.01.19 |
| 2023.01.17 Today's Challenge (0) | 2023.01.17 |
| 2023.01.16 Today's Challenge (0) | 2023.01.16 |
| Today's Challenge (0) | 2023.01.15 |
Comments