题目描述
给你一个正整数数组 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
解题思路
class Solution {
public:
int maximumUniqueSubarray(vector<int>& nums) {
int ans = 0;
int l = 0;
int r = 0;
int tmp = 0;
unordered_set<int> st;
while(r < nums.size()){
if(st.find(nums[r]) == st.end()){
st.insert(nums[r]);
tmp += nums[r];
ans = max(ans, tmp);
}else{
while(l < r && nums[l] != nums[r]){
st.erase(nums[l]);
tmp -= nums[l];
l++;
}
l++;
}
r++;
}
return ans;
}
};