项目场景:
给你一个正整数数组 nums
,请你从中删除一个含有 若干不同元素 的子数组。删除子数组的 得分 就是子数组各元素之 和 。
返回 只删除一个 子数组可获得的 最大得分 。
如果数组 b
是数组 a
的一个连续子序列,即如果它等于 a[l],a[l+1],...,a[r]
,那么它就是 a
的一个子数组。
示例 1:
输入:nums = [4,2,4,5,6] 输出:17 解释:最优子数组是 [2,4,5,6]
示例 2:
输入:nums = [5,2,1,2,5,2,1,2,5] 输出:8 解释:最优子数组是 [5,2,1] 或 [1,2,5]
提示:
1 <= nums.length <= 105
1 <= nums[i] <= 104
问题描述
这题要求删除一个含不同元素的最优子数组,求最大得分。显然这题可以用滑动窗口来解决,在遍历的过程中,利用哈希表记录元素的出现次数,如果超过一次就需要不断调整窗口左端点来使得各元素只出现一次,同时记录最大的ans值,ans值的维护也可在遍历过程中加入一个cur变量,效率会更高,这里为了方便使用了sum。
class Solution:def maximumUniqueSubarray(self, nums: List[int]) -> int:ans=left=0cnt=defaultdict(int)for right,x in enumerate(nums):cnt[x]+=1while cnt[x]>1:cnt[nums[left]]-=1if cnt[nums[left]]==0:del cnt[nums[left]]left+=1ans=max(ans,sum(nums[left:right+1]))return ans
以上为本篇文章的全部内容,感谢你抽出宝贵的时间阅读这篇文章。如果你有任何疑问或建议,欢迎在评论区留言,我们一起交流进步。愿你的代码之路越走越顺,生活充满阳光!