|
40989 | 40989 | <ul class="md-nav__list"> |
40990 | 40990 |
|
40991 | 40991 | <li class="md-nav__item"> |
40992 | | - <a href="#solution-1" class="md-nav__link"> |
| 40992 | + <a href="#solution-1-prefix-sum-counter" class="md-nav__link"> |
40993 | 40993 | <span class="md-ellipsis"> |
40994 | | - Solution 1 |
| 40994 | + Solution 1: Prefix Sum + Counter |
40995 | 40995 | </span> |
40996 | 40996 | </a> |
40997 | 40997 |
|
@@ -86563,8 +86563,13 @@ <h2 id="description">Description</h2> |
86563 | 86563 | <h2 id="solutions">Solutions</h2> |
86564 | 86564 | <!-- solution:start --> |
86565 | 86565 |
|
86566 | | -<h3 id="solution-1">Solution 1</h3> |
86567 | | -<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> |
| 86566 | +<h3 id="solution-1-prefix-sum-counter">Solution 1: Prefix Sum + Counter</h3> |
| 86567 | +<p>We define an array <span class="arithmatex">\(\textit{cnt}\)</span> of length 2 as a counter, where <span class="arithmatex">\(\textit{cnt}[0]\)</span> and <span class="arithmatex">\(\textit{cnt}[1]\)</span> represent the number of subarrays with even and odd prefix sums, respectively. Initially, <span class="arithmatex">\(\textit{cnt}[0] = 1\)</span> and <span class="arithmatex">\(\textit{cnt}[1] = 0\)</span>.</p> |
| 86568 | +<p>Next, we maintain the current prefix sum <span class="arithmatex">\(s\)</span>, initially <span class="arithmatex">\(s = 0\)</span>.</p> |
| 86569 | +<p>Traverse the array <span class="arithmatex">\(\textit{arr}\)</span>, for each element <span class="arithmatex">\(x\)</span> encountered, add the value of <span class="arithmatex">\(x\)</span> to <span class="arithmatex">\(s\)</span>, then based on the parity of <span class="arithmatex">\(s\)</span>, add the value of <span class="arithmatex">\(\textit{cnt}[s \mod 2 \oplus 1]\)</span> to the answer, and then increment the value of <span class="arithmatex">\(\textit{cnt}[s \mod 2]\)</span> by 1.</p> |
| 86570 | +<p>After the traversal, we get the answer. Note the modulo operation for the answer.</p> |
| 86571 | +<p>Time complexity is <span class="arithmatex">\(O(n)\)</span>, where <span class="arithmatex">\(n\)</span> is the length of the array <span class="arithmatex">\(\textit{arr}\)</span>. Space complexity is <span class="arithmatex">\(O(1)\)</span>.</p> |
| 86572 | +<div class="tabbed-set tabbed-alternate" data-tabs="1:6"><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" /><input id="__tabbed_1_6" 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><label for="__tabbed_1_6">Rust</label></div> |
86568 | 86573 | <div class="tabbed-content"> |
86569 | 86574 | <div class="tabbed-block"> |
86570 | 86575 | <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span> |
@@ -86696,6 +86701,36 @@ <h3 id="solution-1">Solution 1</h3> |
86696 | 86701 | <span class="p">}</span> |
86697 | 86702 | </code></pre></div></td></tr></table></div> |
86698 | 86703 | </div> |
| 86704 | +<div class="tabbed-block"> |
| 86705 | +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span> |
| 86706 | +<span class="normal"> 2</span> |
| 86707 | +<span class="normal"> 3</span> |
| 86708 | +<span class="normal"> 4</span> |
| 86709 | +<span class="normal"> 5</span> |
| 86710 | +<span class="normal"> 6</span> |
| 86711 | +<span class="normal"> 7</span> |
| 86712 | +<span class="normal"> 8</span> |
| 86713 | +<span class="normal"> 9</span> |
| 86714 | +<span class="normal">10</span> |
| 86715 | +<span class="normal">11</span> |
| 86716 | +<span class="normal">12</span> |
| 86717 | +<span class="normal">13</span> |
| 86718 | +<span class="normal">14</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">impl</span><span class="w"> </span><span class="n">Solution</span><span class="w"> </span><span class="p">{</span> |
| 86719 | +<span class="w"> </span><span class="k">pub</span><span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">num_of_subarrays</span><span class="p">(</span><span class="n">arr</span><span class="p">:</span><span class="w"> </span><span class="nb">Vec</span><span class="o"><</span><span class="kt">i32</span><span class="o">></span><span class="p">)</span><span class="w"> </span><span class="p">-></span><span class="w"> </span><span class="kt">i32</span><span class="w"> </span><span class="p">{</span> |
| 86720 | +<span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="n">MOD</span><span class="p">:</span><span class="w"> </span><span class="kt">i32</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">1_000_000_007</span><span class="p">;</span> |
| 86721 | +<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">cnt</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="mi">0</span><span class="p">];</span> |
| 86722 | +<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">ans</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> |
| 86723 | +<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> |
| 86724 | +<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="o">&</span><span class="n">x</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">arr</span><span class="p">.</span><span class="n">iter</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> |
| 86725 | +<span class="w"> </span><span class="n">s</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">x</span><span class="p">;</span> |
| 86726 | +<span class="w"> </span><span class="n">ans</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="n">ans</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">cnt</span><span class="p">[((</span><span class="n">s</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="kt">usize</span><span class="p">])</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="n">MOD</span><span class="p">;</span> |
| 86727 | +<span class="w"> </span><span class="n">cnt</span><span class="p">[(</span><span class="n">s</span><span class="w"> </span><span class="o">&</span><span class="w"> </span><span class="mi">1</span><span class="p">)</span><span class="w"> </span><span class="k">as</span><span class="w"> </span><span class="kt">usize</span><span class="p">]</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="mi">1</span><span class="p">;</span> |
| 86728 | +<span class="w"> </span><span class="p">}</span> |
| 86729 | +<span class="w"> </span><span class="n">ans</span> |
| 86730 | +<span class="w"> </span><span class="p">}</span> |
| 86731 | +<span class="p">}</span> |
| 86732 | +</code></pre></div></td></tr></table></div> |
| 86733 | +</div> |
86699 | 86734 | </div> |
86700 | 86735 | </div> |
86701 | 86736 | <!-- solution:end --> |
|
0 commit comments