#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; } };