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

Python에서 최대 삭제 값을 찾는 프로그램

<시간/>

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의 최대값
  • 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

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