{"id":898,"date":"2020-04-02T21:13:04","date_gmt":"2020-04-03T04:13:04","guid":{"rendered":"http:\/\/209.126.2.187\/?p=898"},"modified":"2020-04-02T21:15:58","modified_gmt":"2020-04-03T04:15:58","slug":"subarray-dp","status":"publish","type":"post","link":"https:\/\/nanzhou.cc\/index.php\/2020\/04\/02\/subarray-dp\/","title":{"rendered":"Subarray &#038; DP"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Summary <\/h2>\n\n\n\n<p>In this post, I will introduce some problems related to subarray and dynamic programming. <\/p>\n\n\n\n<p>The most important thing in subarray is that it is continuous. So usually one dimension of the DP will be chosen as &#8220;a subarray starting at index i&#8221;. Then we need a separate loop for it to choose the best starting point. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">OJ<\/h2>\n\n\n\n\n<table id=\"tablepress-5\" class=\"tablepress tablepress-id-5\">\n<thead>\n<tr class=\"row-1\">\n\t<td class=\"column-1\"><\/td><th class=\"column-2\">Trick<\/th><th class=\"column-3\">Difficulty<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\"><a href=\"https:\/\/leetcode.com\/problems\/maximum-subarray\/\" rel=\"noopener noreferrer\" target=\"_blank\">LC 53 <\/a><\/td><td class=\"column-2\">Maximum Subarray Sum<\/td><td class=\"column-3\">3 points<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\"><a href=\"https:\/\/leetcode.com\/problems\/maximum-average-subarray-ii\/\" rel=\"noopener noreferrer\" target=\"_blank\">LC 644<\/a><\/td><td class=\"column-2\">Binary Search Result + Greedy + Maximum Subarray Sum<\/td><td class=\"column-3\">6 points<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\"><a href=\"https:\/\/leetcode.com\/problems\/minimum-window-subsequence\/\" rel=\"noopener noreferrer\" target=\"_blank\">LC 727 <\/a><\/td><td class=\"column-2\">DP+Subarray+Subsequence<\/td><td class=\"column-3\">6 points<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-5 from cache -->\n\n\n\n<h2 class=\"wp-block-heading\">Details<\/h2>\n\n\n\n<h4 class=\"wp-block-heading\">Minimum Window Subsequence<\/h4>\n\n\n\n<p>Given strings\u00a0<code>S<\/code>\u00a0and\u00a0<code>T<\/code>, find the minimum (contiguous)\u00a0<strong>substring<\/strong>\u00a0<code>W<\/code>\u00a0of\u00a0<code>S<\/code>, so that\u00a0<code>T<\/code>\u00a0is a\u00a0<strong>subsequence<\/strong>\u00a0of\u00a0<code>W<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">\/\/ alg[i][j], the shortest subarray starting at i in S contains T[j:] as a subsequence.\n\/\/ alg[i][n] = 0\nalg[i][j] = min{\n  1. 1 + alg[i + 1][j + 1] if S[i] == T[j],\n  2. 1 + alg[i + 1][j],\n}<\/code><\/pre>\n\n\n\n<p>Since dimension <code>i<\/code> is defined as subarray, we should add 1 even if we don&#8217;t want to use the character at <code>i<\/code>. It is wrong if we go with,<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\">alg[i][j] = min{\n  1. 1 + alg[i + 1][j + 1] if S[i] == T[j],\n  2. alg[i + 1][j],\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Summary In this post, I will introduce some problems related to subarray and dynamic programming. The most important thing in subarray is that it is continuous. So usually one dimension of the DP will be chosen as &#8220;a subarray starting at index i&#8221;. Then we need a separate loop for it to choose the best&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-898","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/posts\/898","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/comments?post=898"}],"version-history":[{"count":6,"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/posts\/898\/revisions"}],"predecessor-version":[{"id":912,"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/posts\/898\/revisions\/912"}],"wp:attachment":[{"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/media?parent=898"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/categories?post=898"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nanzhou.cc\/index.php\/wp-json\/wp\/v2\/tags?post=898"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}