【leetcode】1695. Maximum Erasure Value
阿新 • • 發佈:2022-02-05
題目如下:
You are given an array of positive integers
nums
and 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 array
b
is called to be asubarrayofa
if 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