num이라는 배열(양수 값만 포함)이 있고 고유한 요소를 포함하는 하위 배열을 지우고 싶다고 가정합니다. 우리는 하위 배열 요소의 합계인 점수를 얻을 것입니다. 정확히 하나의 하위 배열을 지워서 얻을 수 있는 최대 점수를 찾아야 합니다.
따라서 입력이 nums =[6,3,2,3,6,3,2,3,6]과 같으면 출력은 11이 됩니다. 여기서 최적의 하위 배열은 [6,3,2] 또는 [2,3,6]이므로 합계는 11입니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 본 :=새 지도
- ans :=합계 :=0
- l :=0
- 각 인덱스 r 및 값 x num에 대해 다음을 수행합니다.
- 본에 x가 있으면
- 색인 :=본[x]
- 동안 l <=인덱스, do
- 본 삭제[nums[l]]
- 합계 :=합 - 숫자[l]
- l :=l + 1
- 본[x] :=r
- 합계 :=합 + x
- ans :=ans 및 sum의 최대값
- 본에 x가 있으면
- 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(nums): seen = dict() ans = sum = 0 l = 0 for r, x in enumerate(nums): if x in seen: index = seen[x] while l <= index: del seen[nums[l]] sum -= nums[l] l += 1 seen[x] = r sum += x ans = max(ans, sum) return ans nums = [6,3,2,3,6,3,2,3,6] print(solve(nums))
입력
[6,3,2,3,6,3,2,3,6]
출력
11