zoukankan      html  css  js  c++  java
  • Subarray/Submatrix Target Sum

    Leetcode 560. Subarray Sum Equals K

    求一个数组中和等于k的子数组的个数

    分析:prefix sum + map,当前的prefix sum为cur,之前出现过的prefix sum存到counter中(因为存在负数,可能有多个prefix sum相等,因此counter[x]表示prefix sum == x的个数),

    则以当前点为endpoint的子数组和等于K的个数为counter[cur - k]

    time O(n) 

    space O(n)

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

     Leetcode 1074. Number of Submatrices That Sum to Target

    求一个矩阵中和等于target的子矩阵的个数

    分析:矩阵每一行,计算prefix sum,然后对于任意两列,计算行的累加和,问题就转换为了Subarray Sum Equals K

    time O($n^3$)

    space O(n)

    class Solution {
    public:
        int numSubmatrixSumTarget(vector<vector<int>>& matrix, int target) {
            int m = matrix.size(), n = matrix[0].size();
            for(int i = 0; i < m; ++i){
                for(int j = 1; j < n; ++j){
                    matrix[i][j] += matrix[i][j - 1];
                }
            }
            int res = 0;
            for(int i = 0; i < n; ++i){
                for(int j = i; j < n; ++j){
                    //计算列i与列j之间且宽为j-i+1的所有和等于target的子矩阵个数
                    //等价与将问题转换为了Subarray Sum Equals K
                    unordered_map<int, int> counter;
                    counter[0] = 1;
                    int cur = 0;
                    for(int k = 0; k < m; ++k){
                        cur += matrix[k][j] - (i > 0 ? matrix[k][i - 1] : 0);
                        res += counter[cur - target];
                        counter[cur]++;
                    }
                }
            }
            return res;
        }
    };
  • 相关阅读:
    installanywhere制作java installation
    长文件名处理
    Hibernate+ehcache二级缓存技术
    如何在JSP里添加删除cookie
    收集java精确截取字符串
    在什么情况下可以定义static 方法?
    Hibernate2 到 Hibernate3 的问题
    出现java.lang.UnsupportedClassVersionError 错误的原因
    DMI指标又叫动向指标或趋向指标
    Tomcat下log4j设置文件路径和temp目录
  • 原文地址:https://www.cnblogs.com/betaa/p/11642358.html
Copyright © 2011-2022 走看看