leetcode刷题笔记5630题 删除子数组的最大得分
问题描述:
给你一个正整数数组 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
func maximumUniqueSubarray(nums []int) int {
length := len(nums)
res := 0
hp := make(map[int]int)
for left, right, s := 0, 0, 0; right < length; right ++ {
x := nums[right]
hp[x] += 1
s += x
for (hp[x] > 1) {
hp[nums[left]] -= 1
s -= nums[left]
left += 1
}
res = max(res, s)
}
return res
}
func max(a, b int) int {
if a > b {
return a
} else {
return b
}
}