1、滑动窗口取子数组
2、前缀和记录窗口的和,取最大即可
class Solution {
public:
int maximumUniqueSubarray(vector<int>& nums) {
int n = nums.size(), ans = 0;
unordered_set<int> hash;
//创建无序set容器hash
vector<int> s(n + 1);
//声明一个初始大小为n+1的向量
for(int i = 1; i <= n; i ++)
s[i] = s[i - 1] + nums[i - 1];
//将nums的值转移到vector s中
for(int j = 1, i = 1; j <= n; j ++){
if(!hash.count(nums[j - 1])){
hash.insert(nums[j - 1]);
ans = max(ans, s[j] - s[i - 1]);
continue;
}
while(i < j && nums[i - 1] != nums[j - 1]){
hash.erase(nums[i - 1]);
i ++;
}
i ++;
ans = max(ans, s[j] - s[i]);
}
return ans;
}
};
作者:jin-bao-zi
链接:https://leetcode-cn.com/problems/maximum-erasure-value/solution/hua-dong-chuan-kou-qian-zhui-he-by-jin-b-7dwm/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。