1. 程式人生 > 其它 >【leetcode】1695. Maximum Erasure Value

【leetcode】1695. Maximum Erasure Value

題目如下:

You are given an array of positive integersnumsand want to erase a subarray containingunique elements. Thescoreyou get by erasing the subarray is equal to thesumof its elements.

Returnthemaximum scoreyou can get by erasingexactly onesubarray.

An arraybis called to be asubarrayofaif it forms a contiguous subsequence ofa

, that is, if it is equal toa[l],a[l+1],...,a[r]for some(l,r).

Example 1:

Input: nums = [4,2,4,5,6]
Output: 17
Explanation: The optimal subarray here is [2,4,5,6].

Example 2:

Input: nums = [5,2,1,2,5,2,1,2,5]
Output: 8
Explanation: The optimal subarray here is [5,2,1] or [1,2,5].

Constraints:

  • 1 <= nums.length <= 105
  • 1 <= nums[i] <= 104

解題思路:滑動視窗問題。從左往右依次遍歷nums,並用字典儲存出現的元素以及計算出這些元素的和。如果當前遍歷到對應元素已經出現過,則在字典中刪除最左邊元素。

程式碼如下:

class Solution(object):
    def maximumUniqueSubarray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        left = 0
        right = 0
        dic 
= {} res = 0 amount = 0 while right < len(nums): if nums[right] not in dic: dic[nums[right]] = 1 amount += nums[right] right += 1 res = max(res,amount) else: amount -= nums[left] del dic[nums[left]] left += 1 return res