题解 | #牛牛的独特子数组#

牛牛的独特子数组

https://www.nowcoder.com/practice/d0622bdd537f48ef92af67c4a209d26c

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

全部评论

相关推荐

头像
03-18 09:09
Java
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务