Leetcode 1248 統計「優美子數組」 (前綴和加HashMap優化)

前綴和優化,時間複雜度O(n^2)超時

class Solution {
public:
    int numberOfSubarrays(vector<int>& nums, int k) {
        int n = nums.size();
        int res = 0;
        vector<int> pre(n+1);
        for(int i=1;i<=n;i++){
            pre[i] = pre[i-1];
            if(nums[i-1]%2) pre[i]++;
        }
        for(int i=0;i<n;i++){
            for(int j=i;j<n;j++){
                if(pre[j+1]-pre[i]==k) res++;
            }
        }
        return res;
    }
};

 

前綴和加HashMap優化到O(n) (思路就是twoSum的優化思路)

class Solution {
public:
    int numberOfSubarrays(vector<int>& nums, int k) {
        int n = nums.size();
        int res = 0;
        vector<int> pre(n+1);
        unordered_map<int,int> hashmap;
        for(int i=1;i<=n;i++){
            pre[i] = pre[i-1];
            if(nums[i-1]%2) pre[i]++;
        }
        for(int i=0;i<=n;i++){
            res+= hashmap[pre[i]-k];
            hashmap[pre[i]]++;
        }
        return res;
    }
};

可以用滑動窗口優化到時間O(n), 空間O(1), 不過有點難度。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章