#include <climits>
#include <cmath>
#include <unordered_map>
#include <vector>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param k int整型
* @return int整型
*/
int minSumOfUniqueSubarrays(vector<int>& nums, int k) {
// write code here
int n = nums.size();
unordered_set<int> set;
//和是否需要long long?
int t = 0;
//初始化ans
int ans = INT_MAX;
//滑动窗口,i为头下标,j为尾下标
for(int i = 0, j = 0; i < n; i++){
t += nums[i];
//如果窗口已经包含nums[i]
if(set.count(nums[i])){
//滑动j至nums[j] == nums[i]
while(nums[j] != nums[i]){
t -= nums[j];
set.erase(nums[j]);
j++;
}
t -= nums[j];
j++;
}else{
set.insert(nums[i]);
}
//如果当前窗口元素个数大于k,则滑动j
if(i - j >= k){
t -= nums[j++];
}
//若当前窗口元素个数为k,取最小和为答案
if(i - j == k - 1){
ans = min(ans, t);
}
}
return ans == INT_MAX ? 0 : ans;
}
};