2019年11月3日 星期日

Subarray Sum Equals K


Subarray Sum Equals K

  • Lintcode : 838
  • Level : Easy

Problem

Given an array of integers and an integer k, you need to find the total number of continuous subarrays whose sum equals to k.

Example
Example1

Input: nums = [1,1,1] and k = 2
Output: 2
Explanation:
subarray [0,1] and [1,2]
Example2

Input: nums = [2,1,-1,1,2] and k = 3
Output: 4
Explanation:
subarray [0,1], [1,4], [0,3] and [3,4]

Concept & Algorithm

Time Complexity & Space Complexity

time : O(n)
space: O(n)

Answer

/*
// TLE
class Solution {
public:
    int subarraySumEqualsK(vector<int> &nums, int k) {
        if (nums.size() == 0) return 0;
        vector<int> prefix;
        int sum = 0;
        prefix.push_back(sum);
        for (auto i : nums) {
            sum += i;
            prefix.push_back(sum);
        }
        int count = 0;
        for (int i = 1; i < prefix.size(); i++) {
            for (int j = 0; j < i; j++) {
                if (prefix[i] - prefix[j] == k) count++;
            }
        }
        return count;
    }
};
*/

class Solution {
public:
    int subarraySumEqualsK(vector<int> &nums, int k) {
        for (int i = 1; i < nums.size(); i++) {
            nums[i] += nums[i - 1];
        }
        map<int, int> map;
        int count = 0;
        map[0] = 1;
        for (int i = 0; i < nums.size(); i++) {
            count += map[nums[i] - k];
            map[nums[i]]++;
        }
        return count;
    }
};
tags: other

沒有留言:

張貼留言

Last Position of Target

Last Position of Target Lintcode : 458 / Leetcode : 34 Level : Easy Problem Find the last position of a target number in a sorted ...