Skip to content

Commit ca8978c

Browse files
committed
deploy: 5c1ede2
1 parent e16cea9 commit ca8978c

File tree

10 files changed

+7413
-7397
lines changed

10 files changed

+7413
-7397
lines changed

en/lc/2151/index.html

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82214,17 +82214,17 @@ <h3 id="solution-1">Solution 1</h3>
8221482214
<span class="normal">12</span>
8221582215
<span class="normal">13</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">class</span><span class="w"> </span><span class="nc">Solution</span><span class="p">:</span>
8221682216
<span class="k">def</span><span class="w"> </span><span class="nf">maximumGood</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">statements</span><span class="p">:</span> <span class="n">List</span><span class="p">[</span><span class="n">List</span><span class="p">[</span><span class="nb">int</span><span class="p">]])</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
82217-
<span class="k">def</span><span class="w"> </span><span class="nf">check</span><span class="p">(</span><span class="n">mask</span><span class="p">):</span>
82217+
<span class="k">def</span><span class="w"> </span><span class="nf">check</span><span class="p">(</span><span class="n">mask</span><span class="p">:</span> <span class="nb">int</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="nb">int</span><span class="p">:</span>
8221882218
<span class="n">cnt</span> <span class="o">=</span> <span class="mi">0</span>
82219-
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">statements</span><span class="p">):</span>
82220-
<span class="k">if</span> <span class="p">(</span><span class="n">mask</span> <span class="o">&gt;&gt;</span> <span class="n">i</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">1</span><span class="p">:</span>
82221-
<span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">s</span><span class="p">):</span>
82222-
<span class="k">if</span> <span class="n">v</span> <span class="o">&lt;</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">((</span><span class="n">mask</span> <span class="o">&gt;&gt;</span> <span class="n">j</span><span class="p">)</span> <span class="o">&amp;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">!=</span> <span class="n">v</span><span class="p">:</span>
82219+
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">row</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">statements</span><span class="p">):</span>
82220+
<span class="k">if</span> <span class="n">mask</span> <span class="o">&gt;&gt;</span> <span class="n">i</span> <span class="o">&amp;</span> <span class="mi">1</span><span class="p">:</span>
82221+
<span class="k">for</span> <span class="n">j</span><span class="p">,</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">row</span><span class="p">):</span>
82222+
<span class="k">if</span> <span class="n">x</span> <span class="o">&lt;</span> <span class="mi">2</span> <span class="ow">and</span> <span class="p">(</span><span class="n">mask</span> <span class="o">&gt;&gt;</span> <span class="n">j</span> <span class="o">&amp;</span> <span class="mi">1</span><span class="p">)</span> <span class="o">!=</span> <span class="n">x</span><span class="p">:</span>
8222382223
<span class="k">return</span> <span class="mi">0</span>
8222482224
<span class="n">cnt</span> <span class="o">+=</span> <span class="mi">1</span>
8222582225
<span class="k">return</span> <span class="n">cnt</span>
8222682226

82227-
<span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">check</span><span class="p">(</span><span class="n">mask</span><span class="p">)</span> <span class="k">for</span> <span class="n">mask</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">statements</span><span class="p">)))</span>
82227+
<span class="k">return</span> <span class="nb">max</span><span class="p">(</span><span class="n">check</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">statements</span><span class="p">)))</span>
8222882228
</code></pre></div></td></tr></table></div>
8222982229
</div>
8223082230
<div class="tabbed-block">

en/lc/2944/index.html

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69212,27 +69212,27 @@
6921269212
<ul class="md-nav__list">
6921369213

6921469214
<li class="md-nav__item">
69215-
<a href="#solution-1" class="md-nav__link">
69215+
<a href="#solution-1-memoization-search" class="md-nav__link">
6921669216
<span class="md-ellipsis">
69217-
Solution 1
69217+
Solution 1: Memoization Search
6921869218
</span>
6921969219
</a>
6922069220

6922169221
</li>
6922269222

6922369223
<li class="md-nav__item">
69224-
<a href="#solution-2" class="md-nav__link">
69224+
<a href="#solution-2-dynamic-programming" class="md-nav__link">
6922569225
<span class="md-ellipsis">
69226-
Solution 2
69226+
Solution 2: Dynamic Programming
6922769227
</span>
6922869228
</a>
6922969229

6923069230
</li>
6923169231

6923269232
<li class="md-nav__item">
69233-
<a href="#solution-3" class="md-nav__link">
69233+
<a href="#solution-3-dynamic-programming-monotonic-queue-optimization" class="md-nav__link">
6923469234
<span class="md-ellipsis">
69235-
Solution 3
69235+
Solution 3: Dynamic Programming + Monotonic Queue Optimization
6923669236
</span>
6923769237
</a>
6923869238

@@ -82219,7 +82219,15 @@ <h2 id="description">Description</h2>
8221982219
<h2 id="solutions">Solutions</h2>
8222082220
<!-- solution:start -->
8222182221

82222-
<h3 id="solution-1">Solution 1</h3>
82222+
<h3 id="solution-1-memoization-search">Solution 1: Memoization Search</h3>
82223+
<p>We define a function $\textit{dfs}(i)$ to represent the minimum number of coins needed to buy all the fruits starting from the $i$-th fruit. The answer is $\textit{dfs}(1)$.</p>
82224+
<p>The execution logic of the function $\textit{dfs}(i)$ is as follows:</p>
82225+
<ul>
82226+
<li>If $i \times 2 \geq n$, it means that buying the $(i - 1)$-th fruit is sufficient, and the remaining fruits can be obtained for free, so return $\textit{prices}[i - 1]$.</li>
82227+
<li>Otherwise, we can buy fruit $i$, and then choose a fruit $j$ to start buying from the next $i + 1$ to $2i + 1$ fruits. Thus, $\textit{dfs}(i) = \textit{prices}[i - 1] + \min_{i + 1 \le j \le 2i + 1} \textit{dfs}(j)$.</li>
82228+
</ul>
82229+
<p>To avoid redundant calculations, we use memoization to store the results that have already been computed. When encountering the same situation again, we directly return the result.</p>
82230+
<p>The time complexity is $O(n^2)$, and the space complexity is $O(n)$. Here, $n$ is the length of the array $\textit{prices}$.</p>
8222382231
<div class="tabbed-set tabbed-alternate" data-tabs="1:5"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Python3</label><label for="__tabbed_1_2">Java</label><label for="__tabbed_1_3">C++</label><label for="__tabbed_1_4">Go</label><label for="__tabbed_1_5">TypeScript</label></div>
8222482232
<div class="tabbed-content">
8222582233
<div class="tabbed-block">
@@ -82416,7 +82424,12 @@ <h3 id="solution-1">Solution 1</h3>
8241682424

8241782425
<!-- solution:start -->
8241882426

82419-
<h3 id="solution-2">Solution 2</h3>
82427+
<h3 id="solution-2-dynamic-programming">Solution 2: Dynamic Programming</h3>
82428+
<p>We can rewrite the memoization search in Solution 1 into a dynamic programming form.</p>
82429+
<p>Similar to Solution 1, we define $f[i]$ to represent the minimum number of coins needed to buy all the fruits starting from the $i$-th fruit. The answer is $f[1]$.</p>
82430+
<p>The state transition equation is $f[i] = \min_{i + 1 \le j \le 2i + 1} f[j] + \textit{prices}[i - 1]$.</p>
82431+
<p>The time complexity is $O(n^2)$, and the space complexity is $O(n)$. Here, $n$ is the length of the array $\textit{prices}$.</p>
82432+
<p>In the code implementation, we can directly use the $\textit{prices}$ array to store the $f$ array, thus optimizing the space complexity to $O(1)$.</p>
8242082433
<div class="tabbed-set tabbed-alternate" data-tabs="2:5"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Python3</label><label for="__tabbed_2_2">Java</label><label for="__tabbed_2_3">C++</label><label for="__tabbed_2_4">Go</label><label for="__tabbed_2_5">TypeScript</label></div>
8242182434
<div class="tabbed-content">
8242282435
<div class="tabbed-block">
@@ -82517,7 +82530,10 @@ <h3 id="solution-2">Solution 2</h3>
8251782530

8251882531
<!-- solution:start -->
8251982532

82520-
<h3 id="solution-3">Solution 3</h3>
82533+
<h3 id="solution-3-dynamic-programming-monotonic-queue-optimization">Solution 3: Dynamic Programming + Monotonic Queue Optimization</h3>
82534+
<p>Observing the state transition equation in Solution 2, we can see that for each $i$, we need to find the minimum value of $f[i + 1], f[i + 2], \cdots, f[2i + 1]$. As $i$ decreases, the range of these values also decreases. This is essentially finding the minimum value in a sliding window with a narrowing range, which can be optimized using a monotonic queue.</p>
82535+
<p>We calculate from back to front, maintaining a monotonically increasing queue $q$, where the queue stores indices. If the front element of $q$ is greater than $i \times 2 + 1$, it means that the elements after $i$ will not be used, so we dequeue the front element. If $i$ is not greater than $(n - 1) / 2$, we can add $\textit{prices}[q[0] - 1]$ to $\textit{prices}[i - 1]$, and then add $i$ to the back of the queue. If the fruit price corresponding to the back element of $q$ is greater than or equal to $\textit{prices}[i - 1]$, we dequeue the back element until the fruit price corresponding to the back element is less than $\textit{prices}[i - 1]$ or the queue is empty, then add $i$ to the back of the queue.</p>
82536+
<p>The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the length of the array $\textit{prices}$.</p>
8252182537
<div class="tabbed-set tabbed-alternate" data-tabs="3:5"><input checked="checked" id="__tabbed_3_1" name="__tabbed_3" type="radio" /><input id="__tabbed_3_2" name="__tabbed_3" type="radio" /><input id="__tabbed_3_3" name="__tabbed_3" type="radio" /><input id="__tabbed_3_4" name="__tabbed_3" type="radio" /><input id="__tabbed_3_5" name="__tabbed_3" type="radio" /><div class="tabbed-labels"><label for="__tabbed_3_1">Python3</label><label for="__tabbed_3_2">Java</label><label for="__tabbed_3_3">C++</label><label for="__tabbed_3_4">Go</label><label for="__tabbed_3_5">TypeScript</label></div>
8252282538
<div class="tabbed-content">
8252382539
<div class="tabbed-block">

en/search/search_index.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)