1. 程式人生 > >560. 和為K的子陣列

560. 和為K的子陣列

給定一個整數陣列和一個整數 k,你需要找到該陣列中和為 的連續的子陣列的個數。

示例 1 :

輸入:nums = [1,1,1], k = 2
輸出: 2 , [1,1] 與 [1,1] 為兩種不同的情況。

說明 :

  1. 陣列的長度為 [1, 20,000]。
  2. 陣列中元素的範圍是 [-1000, 1000] ,且整數 的範圍是 [-1e7, 1e7]。

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