1695. Maximum Erasure Value
解题思路
题目要求我们求一个正整数数组 nums 的累加和最大的无重复元素的连续子数组,返回其累加和的值
因为要求连续子数组,所以我们优先考虑滑动窗口的方式
另外,我们可以用一个集合来记录当前窗口内已有的元素,如果出现了重复元素,则将窗口内该元素包含之前的元素全部清理出窗口外
我们记录下每个符合条件的窗口累加和,最后再取最大值就是题目所求了
C++
class Solution {
public:
int maximumUniqueSubarray(vector<int>& nums) {
int left = 0, right = 0;
int res = -1;
int sum = 0;
unordered_set<int> set;
int len = nums.size();
while(right < len) {
sum += nums[right];
while(set.count(nums[right]) != 0) {
sum -= nums[left];
set.erase(nums[left]);
left++;
}
set.insert(nums[right]);
res = max(res, sum);
right++;
}
return res;
}
};
Javascript
/**
* @param {number[]} nums
* @return {number}
*/
var maximumUniqueSubarray = function(nums) {
let left = 0, right = 0;
let set = new Set();
let res = -1;
let sum = 0;
let len = nums.length;
while(right < len) {
sum += nums[right];
while(set.has(nums[right])) {
sum -= nums[left];
set.delete(nums[left]);
left++;
}
set.add(nums[right]);
res = Math.max(res, sum);
right++;
}
return res;
};