{"componentChunkName":"component---src-lekoarts-gatsby-theme-minimal-blog-core-templates-post-query-tsx","path":"/number-of-submatrices-that-sum-to-target","result":{"data":{"post":{"slug":"/number-of-submatrices-that-sum-to-target","title":"Number of submatrices that sum to target","date":"October 27, 2019","tags":[{"name":"Algorithm","slug":"algorithm"},{"name":"LeetCode","slug":"leet-code"}],"description":null,"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Number of submatrices that sum to target\",\n  \"date\": \"2019-10-27T13:20:59.000Z\",\n  \"tags\": [\"Algorithm\", \"LeetCode\"],\n  \"excerpt\": \"Explanations with pictures\"\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This article is a complete analysis of \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://leetcode.com/problems/number-of-submatrices-that-sum-to-target/\"\n  }), \"1074. Number of submatrices that sum to target\"), \" from LeetCode.\"), mdx(\"h2\", null, \"Brute force\"), mdx(\"p\", null, \"Consider every possible \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"[a, b]\"), \"(top-left position) and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"[c, d]\"), \" (bottom-right position) pair, and check their sums.\"), mdx(\"h3\", null, \"Time complexity\"), mdx(\"p\", null, \"Without loss of generality, we assume the given matrix is a square matrix with size \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"nxn\"), \".\"), mdx(\"p\", null, \"For each \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"a\"), \", we have \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"n\"), \" choices for \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"b\"), \", and we have \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"n\"), \" choices for \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"a\"), \" \\u2014> \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"2\"))), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"n^2\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\",\n      \"verticalAlign\": \"0em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"2\"))))))))))), \".\"), mdx(\"p\", null, \"For each \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"[a, b]\"), \", we have \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"n*n\"), \" pairs of \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"[c, d]\"), \". \\u2014> \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"2\")), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"\\u2217\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"2\")), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"=\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"4\"))), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"n^2 * n^2 = n^4\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\",\n      \"verticalAlign\": \"0em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"2\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mbin\"\n  }), \"\\u2217\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  }))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\",\n      \"verticalAlign\": \"0em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"2\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mrel\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  }))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\",\n      \"verticalAlign\": \"0em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"4\")))))))))))), mdx(\"p\", null, \"However, each time we need to sum up all entries in the submatrix, giving us \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"6\")), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n^6)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1.064108em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"6\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \". This is unacceptable for large inputs.\"), mdx(\"h2\", null, \"Optimize the brute force strategy\"), mdx(\"p\", null, \"Do we need to sum up all entries in a submatrix every time? Can we reuse some computations?\"), mdx(\"p\", null, \"Observation from a simple case: if the \\u201Cheight\\u201D of the matrix is 1, it is essentially an array. Let \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[i]\"), \" denote the sum of the subarray from index \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"0\"), \" to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"i\"), \". If we want to know \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[3]\"), \", we only need to add the third element to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[2]\"), \". So we can store \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[i]\"), \", and the addition only costs \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"1\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(1)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"1\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \".\"), mdx(\"p\", null, \"We can extend the idea to 2D to reuse computations:\"), mdx(\"p\", null, mdx(\"img\", _extends({\n    parentName: \"p\"\n  }, {\n    \"src\": \"https://cdn.jsdelivr.net/gh/Deerhound579/image-hosting/img/iW07t68.png\",\n    \"alt\": \"Imgur\"\n  }))), mdx(\"p\", null, \"To get \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[i, j]\"), \", we use the following loop:\"), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-python\"\n  }), \"for i in range(rowsize):\\n    for j in range(colsize):\\n        if i==0 && j==0:\\n            ps[i][j] = matrix[i][j]\\n        else if i==0 && j>0: # first row\\n            ps[i][j] = p[i][j-1] + matrix[i][j]\\n        else if i>0 && j==0: # first col\\n            ps[i][j] = p[i-1][j] + matrix[i][j]\\n        else:\\n            ps[i][j] = p[i-1][j] + p[i][j-1] - p[i-1][j-1] + matrix[i][j]\\n\")), mdx(\"h3\", null, \"Time complexity\"), mdx(\"p\", null, \"Now, we can get the sum of any submatrix in \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"1\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(1)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"1\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \" use the formula, but we still have \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"4\")), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n^4)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1.064108em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"4\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \" pairs of \\u201Ctop-left\\u201D and \\u201Cbottom-right\\u201D which can\\u2019t be reduced further. The total cost is \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"4\")), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n^4)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1.064108em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"4\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \".\"), mdx(\"h2\", null, \"\\u201CCompress\\u201D rows to 1D\"), mdx(\"h3\", null, \"Number of subarrays that sum to target\"), mdx(\"p\", null, \"It\\u2019s always easier to start with a simpler version of the problem and extend the idea.\"), mdx(\"p\", null, \"The 1D counterpart of this problem is \\u201Cnumber of subarrays that sum to target\\u201D.\"), mdx(\"p\", null, \"The idea is from \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"https://leetcode.com/problems/subarray-sum-equals-k/discuss/102106/Java-Solution-PreSum-%2B-HashMap\"\n  }), \"the discussion of 560. Subarray Sum Equals K \"), \". It is amazing how a key observation reduced the cost to \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"n\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \".\"), mdx(\"p\", null, \"Let \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[i, j]\"), \" denote the sum from index \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"i\"), \" to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"j\"), \".\"), mdx(\"p\", null, \"We observe that the any \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[i, j]\"), \" can be broken into two parts:\"), mdx(\"span\", {\n    \"className\": \"katex-display\"\n  }, mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mtable\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"rowspacing\": \"0.24999999999999992em\",\n    \"columnalign\": \"right left\",\n    \"columnspacing\": \"0em\"\n  }), mdx(\"mtr\", {\n    parentName: \"mtable\"\n  }, mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mrow\", {\n    parentName: \"mstyle\"\n  }, mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"i\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"separator\": \"true\"\n  }), \",\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"j\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\")))), mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mrow\", {\n    parentName: \"mstyle\"\n  }, mdx(\"mrow\", {\n    parentName: \"mrow\"\n  }), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"=\"), mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"0\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"separator\": \"true\"\n  }), \",\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"j\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\"), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"\\u2212\"), mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"i\"), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"\\u2212\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"1\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\"))))), mdx(\"mtr\", {\n    parentName: \"mtable\"\n  }, mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mrow\", {\n    parentName: \"mstyle\"\n  }, mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"Assume\\xA0sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"i\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"separator\": \"true\"\n  }), \",\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"j\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\")))), mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mrow\", {\n    parentName: \"mstyle\"\n  }, mdx(\"mrow\", {\n    parentName: \"mrow\"\n  }), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"=\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"k\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"separator\": \"true\"\n  }), \",\"), mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"the\\xA0given\\xA0target\"))))), mdx(\"mtr\", {\n    parentName: \"mtable\"\n  }, mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mi\", {\n    parentName: \"mstyle\"\n  }, \"k\"))), mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mrow\", {\n    parentName: \"mstyle\"\n  }, mdx(\"mrow\", {\n    parentName: \"mrow\"\n  }), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"=\"), mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"0\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"separator\": \"true\"\n  }), \",\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"j\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\"), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"\\u2212\"), mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"i\"), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"\\u2212\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"1\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\"))))), mdx(\"mtr\", {\n    parentName: \"mtable\"\n  }, mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mrow\", {\n    parentName: \"mstyle\"\n  }, mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"i\"), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"\\u2212\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"1\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\")))), mdx(\"mtd\", {\n    parentName: \"mtr\"\n  }, mdx(\"mstyle\", _extends({\n    parentName: \"mtd\"\n  }, {\n    \"scriptlevel\": \"0\",\n    \"displaystyle\": \"true\"\n  }), mdx(\"mrow\", {\n    parentName: \"mstyle\"\n  }, mdx(\"mrow\", {\n    parentName: \"mrow\"\n  }), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"=\"), mdx(\"mtext\", {\n    parentName: \"mrow\"\n  }, \"sum\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"[\"), mdx(\"mn\", {\n    parentName: \"mrow\"\n  }, \"0\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"separator\": \"true\"\n  }), \",\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"j\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"]\"), mdx(\"mo\", {\n    parentName: \"mrow\"\n  }, \"\\u2212\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"k\")))))), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"\\\\begin{aligned}\\n\\\\text{sum}[i, j] &= \\\\text{sum}[0, j] - \\\\text{sum}[i-1]\\\\\\\\\\n\\\\text{Assume sum}[i, j]& = k, \\\\text{the given target}\\\\\\\\\\nk &= \\\\text{sum}[0, j] - \\\\text{sum}[i-1]\\\\\\\\\\n\\\\text{sum}[i-1] &=\\\\text{sum}[0, j]-k\\n\\\\end{aligned}\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"6em\",\n      \"verticalAlign\": \"-2.7500000000000004em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mtable\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"col-align-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t vlist-t2\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"3.25em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-5.41em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"i\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mpunct\"\n  }), \",\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.16666666666666666em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.05724em\"\n    }\n  }), \"j\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\"))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.91em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"Assume\\xA0sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"i\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mpunct\"\n  }), \",\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.16666666666666666em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.05724em\"\n    }\n  }), \"j\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\"))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-2.4099999999999993em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.03148em\"\n    }\n  }), \"k\"))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-0.9099999999999997em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"i\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mbin\"\n  }), \"\\u2212\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"1\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-s\"\n  }), \"\\u200B\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"2.7500000000000004em\"\n    }\n  }), mdx(\"span\", {\n    parentName: \"span\"\n  }))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"col-align-l\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t vlist-t2\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"3.25em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-5.41em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mrel\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"0\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mpunct\"\n  }), \",\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.16666666666666666em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.05724em\"\n    }\n  }), \"j\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mbin\"\n  }), \"\\u2212\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"i\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mbin\"\n  }), \"\\u2212\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"1\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\"))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.91em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mrel\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.03148em\"\n    }\n  }), \"k\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mpunct\"\n  }), \",\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.16666666666666666em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"the\\xA0given\\xA0target\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-2.4099999999999993em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mrel\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"0\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mpunct\"\n  }), \",\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.16666666666666666em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.05724em\"\n    }\n  }), \"j\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mbin\"\n  }), \"\\u2212\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"i\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mbin\"\n  }), \"\\u2212\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"1\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\"))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-0.9099999999999997em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"3em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mrel\"\n  }), \"=\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2777777777777778em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord text\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"sum\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"[\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), \"0\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mpunct\"\n  }), \",\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.16666666666666666em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.05724em\"\n    }\n  }), \"j\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \"]\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mbin\"\n  }), \"\\u2212\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mspace\",\n    \"style\": {\n      \"marginRight\": \"0.2222222222222222em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.03148em\"\n    }\n  }), \"k\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-s\"\n  }), \"\\u200B\")), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"2.7500000000000004em\"\n    }\n  }), mdx(\"span\", {\n    parentName: \"span\"\n  }))))))))))), mdx(\"p\", null, mdx(\"img\", _extends({\n    parentName: \"p\"\n  }, {\n    \"src\": \"https://cdn.jsdelivr.net/gh/Deerhound579/image-hosting/img/FU3Tmyp.png\",\n    \"alt\": \"Imgur\"\n  }))), mdx(\"p\", null, \"The key observation is: #occurrences of \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"sum[0, j]-k\"), \" is equivalent to the number of subarrays that sum to \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"k\"), \" among all possible subarrays between \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"0\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"j\"), \". Let\\u2019s consider an example:\"), mdx(\"p\", null, mdx(\"img\", _extends({\n    parentName: \"p\"\n  }, {\n    \"src\": \"https://cdn.jsdelivr.net/gh/Deerhound579/image-hosting/img/sKxlck4.png\",\n    \"alt\": \"Imgur\"\n  }))), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-python\"\n  }), \"from collections import Counter\\nclass Solution:\\n    def subarraySum(self, nums: List[int], k: int) -> int:\\n        result, cur_sum = 0, 0\\n        # counter stores the value of a sum and its number of occurences\\n        # Adding {0:1} means if sum = k, sum-k = 0, increment by 1\\n        counter = Counter({0:1})\\n        for j in range(len(nums)):\\n            # add the new number to the exsiting sum\\n            # cur_sum stores the sum of subarray[0, j]\\n            cur_sum += nums[i]\\n            # increment the result by the number of subarrays that sum to cur_sum - k\\n            result += counter[cur_sum - k]\\n            # store the current sum in counter\\n            counter[cur_sum] += 1\\n        return result\\n\")), mdx(\"h3\", null, \"From 1D to 2D\"), mdx(\"p\", null, \"If we can control one dimension, we will reduce the matrix problem to the simpler array problem.\"), mdx(\"p\", null, \"We first compute the prefix sum for each row, and we fix col \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"i\"), \" an col \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"j\"), \" to \\u201Cconvert\\u201D the submatrix to a subarray.\"), mdx(\"p\", null, mdx(\"img\", _extends({\n    parentName: \"p\"\n  }, {\n    \"src\": \"https://cdn.jsdelivr.net/gh/Deerhound579/image-hosting/img/z5LT919.png\",\n    \"alt\": \"Imgur\"\n  }))), mdx(\"pre\", null, mdx(\"code\", _extends({\n    parentName: \"pre\"\n  }, {\n    \"className\": \"language-python\"\n  }), \"from collections import Counter\\nclass Solution:\\n    def numSubmatrixSumTarget(self, A: List[List[int]], target: int) -> int:\\n        result = 0\\n        rowsize, colsize = len(A), len(A[0])\\n        # get prefix sum for each row\\n        for row in A:\\n            for j in range(1, colsize):\\n                row[j] += row[j-1]\\n\\n        # left and right col define the width of the matrix\\n        for leftcol in range(colsize):\\n            for rightcol in range(leftcol, colsize):\\n                counter = Counter({0:1})\\n                cur_sum = 0\\n                for r in range(rowsize):\\n                    cur_sum += A[r][rightcol] - (A[r][leftcol-1] if leftcol>0 else 0)\\n                    result += counter[cur_sum - target]\\n                    counter[cur_sum] += 1\\n        return result\\n\")), mdx(\"h3\", null, \"Time complexity\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Get prefix sum for each row \\u2014> \", mdx(\"span\", _extends({\n    parentName: \"li\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"2\")), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n^2)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1.064108em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"2\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\"))))), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"For each pair of \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"(i, j)\"), \", we need \", mdx(\"span\", _extends({\n    parentName: \"li\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"n\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \" to determine the submatrices. There are \", mdx(\"span\", _extends({\n    parentName: \"li\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"2\")), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n^2)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1.064108em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"2\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))), \" pairs \\u2014> \", mdx(\"span\", _extends({\n    parentName: \"li\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"3\")), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n^3)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1.064108em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"3\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\")))))), mdx(\"p\", null, \"Total cost: \", mdx(\"span\", _extends({\n    parentName: \"p\"\n  }, {\n    \"className\": \"katex\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-mathml\"\n  }), mdx(\"math\", _extends({\n    parentName: \"span\"\n  }, {\n    \"xmlns\": \"http://www.w3.org/1998/Math/MathML\"\n  }), mdx(\"semantics\", {\n    parentName: \"math\"\n  }, mdx(\"mrow\", {\n    parentName: \"semantics\"\n  }, mdx(\"mi\", {\n    parentName: \"mrow\"\n  }, \"O\"), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \"(\"), mdx(\"msup\", {\n    parentName: \"mrow\"\n  }, mdx(\"mi\", {\n    parentName: \"msup\"\n  }, \"n\"), mdx(\"mn\", {\n    parentName: \"msup\"\n  }, \"3\")), mdx(\"mo\", _extends({\n    parentName: \"mrow\"\n  }, {\n    \"stretchy\": \"false\"\n  }), \")\")), mdx(\"annotation\", _extends({\n    parentName: \"semantics\"\n  }, {\n    \"encoding\": \"application/x-tex\"\n  }), \"O(n^3)\")))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"katex-html\",\n    \"aria-hidden\": \"true\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"base\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"strut\",\n    \"style\": {\n      \"height\": \"1.064108em\",\n      \"verticalAlign\": \"-0.25em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\",\n    \"style\": {\n      \"marginRight\": \"0.02778em\"\n    }\n  }), \"O\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mopen\"\n  }), \"(\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mathdefault\"\n  }), \"n\"), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"msupsub\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-t\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist-r\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"vlist\",\n    \"style\": {\n      \"height\": \"0.8141079999999999em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"style\": {\n      \"top\": \"-3.063em\",\n      \"marginRight\": \"0.05em\"\n    }\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"pstrut\",\n    \"style\": {\n      \"height\": \"2.7em\"\n    }\n  })), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"sizing reset-size6 size3 mtight\"\n  }), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mord mtight\"\n  }), \"3\")))))))), mdx(\"span\", _extends({\n    parentName: \"span\"\n  }, {\n    \"className\": \"mclose\"\n  }), \")\"))))), mdx(\"p\", null, \"The similar idea of manipulating the equation can also be applied to any problem associated with \\u201Cfind the number of sub-patterns that satisfy a given condition\\u201D.\"));\n}\n;\nMDXContent.isMDXComponent = true;","excerpt":"Explanations with pictures","banner":null}},"pageContext":{"slug":"/number-of-submatrices-that-sum-to-target"}}}