Skip to content

Commit c3abfdf

Browse files
committed
deploy: 66c0854
1 parent 48acf4d commit c3abfdf

File tree

10 files changed

+215
-97
lines changed

10 files changed

+215
-97
lines changed

en/lc/974/index.html

Lines changed: 18 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -86188,43 +86188,14 @@ <h2 id="solutions">Solutions</h2>
8618886188
<!-- solution:start -->
8618986189

8619086190
<h3 id="solution-1-hash-table-prefix-sum">Solution 1: Hash Table + Prefix Sum</h3>
86191-
<ol>
86192-
<li>
86193-
<p><strong>Key Insight</strong>:</p>
86194-
<ul>
86195-
<li>If there exist indices <span class="arithmatex">\(i\)</span> and <span class="arithmatex">\(j\)</span> such that <span class="arithmatex">\(i \leq j\)</span>, and the sum of the subarray <span class="arithmatex">\(nums[i, ..., j]\)</span> is divisible by <span class="arithmatex">\(k\)</span>, then <span class="arithmatex">\((s_j - s_i) \bmod k = 0\)</span>, this implies: <span class="arithmatex">\(s_j \bmod k = s_i \bmod k\)</span></li>
86196-
<li>We can use a hash table to count the occurrences of prefix sums modulo <span class="arithmatex">\(k\)</span> to efficiently check for subarrays satisfying the condition.</li>
86197-
</ul>
86198-
</li>
86199-
<li>
86200-
<p><strong>Prefix Sum Modulo</strong>:</p>
86201-
<ul>
86202-
<li>Use a hash table <span class="arithmatex">\(cnt\)</span> to count occurrences of each prefix sum modulo <span class="arithmatex">\(k\)</span>.</li>
86203-
<li><span class="arithmatex">\(cnt[i]\)</span> represents the number of prefix sums with modulo <span class="arithmatex">\(k\)</span> equal to <span class="arithmatex">\(i\)</span>.</li>
86204-
<li>Initialize <span class="arithmatex">\(cnt[0] = 1\)</span> to account for subarrays directly divisible by <span class="arithmatex">\(k\)</span>.</li>
86205-
</ul>
86206-
</li>
86207-
<li>
86208-
<p><strong>Algorithm</strong>:</p>
86209-
<ul>
86210-
<li>Let a variable <span class="arithmatex">\(s\)</span> represent the running prefix sum, starting with <span class="arithmatex">\(s = 0\)</span>.</li>
86211-
<li>Traverse the array <span class="arithmatex">\(nums\)</span> from left to right.<ul>
86212-
<li>For each element <span class="arithmatex">\(x\)</span>:<ul>
86213-
<li>Compute <span class="arithmatex">\(s = (s + x) \bmod k\)</span>.</li>
86214-
<li>Update the result: <span class="arithmatex">\(ans += cnt[s]\)</span>.</li>
86215-
<li>Increment <span class="arithmatex">\(cnt[s]\)</span> by <span class="arithmatex">\(1\)</span>.</li>
86216-
</ul>
86217-
</li>
86218-
</ul>
86219-
</li>
86220-
<li>Return the result <span class="arithmatex">\(ans\)</span>.</li>
86221-
</ul>
86222-
</li>
86223-
</ol>
86191+
<p>Suppose there exists <span class="arithmatex">\(i \leq j\)</span> such that the sum of <span class="arithmatex">\(\textit{nums}[i,..j]\)</span> is divisible by <span class="arithmatex">\(k\)</span>. If we let <span class="arithmatex">\(s_i\)</span> represent the sum of <span class="arithmatex">\(\textit{nums}[0,..i]\)</span> and <span class="arithmatex">\(s_j\)</span> represent the sum of <span class="arithmatex">\(\textit{nums}[0,..j]\)</span>, then <span class="arithmatex">\(s_j - s_i\)</span> is divisible by <span class="arithmatex">\(k\)</span>, i.e., <span class="arithmatex">\((s_j - s_i) \bmod k = 0\)</span>, which means <span class="arithmatex">\(s_j \bmod k = s_i \bmod k\)</span>. Therefore, we can use a hash table to count the number of prefix sums modulo <span class="arithmatex">\(k\)</span>, allowing us to quickly determine if there exists a subarray that meets the condition.</p>
86192+
<p>We use a hash table <span class="arithmatex">\(\textit{cnt}\)</span> to count the number of prefix sums modulo <span class="arithmatex">\(k\)</span>, where <span class="arithmatex">\(\textit{cnt}[i]\)</span> represents the number of prefix sums with a modulo <span class="arithmatex">\(k\)</span> value of <span class="arithmatex">\(i\)</span>. Initially, <span class="arithmatex">\(\textit{cnt}[0] = 1\)</span>. We use a variable <span class="arithmatex">\(s\)</span> to represent the prefix sum, initially <span class="arithmatex">\(s = 0\)</span>.</p>
86193+
<p>Next, we traverse the array <span class="arithmatex">\(\textit{nums}\)</span> from left to right. For each element <span class="arithmatex">\(x\)</span>, we calculate <span class="arithmatex">\(s = (s + x) \bmod k\)</span>, then update the answer <span class="arithmatex">\(\textit{ans} = \textit{ans} + \textit{cnt}[s]\)</span>, where <span class="arithmatex">\(\textit{cnt}[s]\)</span> represents the number of prefix sums with a modulo <span class="arithmatex">\(k\)</span> value of <span class="arithmatex">\(s\)</span>. Finally, we increment the value of <span class="arithmatex">\(\textit{cnt}[s]\)</span> by <span class="arithmatex">\(1\)</span> and continue to the next element.</p>
86194+
<p>In the end, we return the answer <span class="arithmatex">\(\textit{ans}\)</span>.</p>
8622486195
<blockquote>
86225-
<p>Note: if <span class="arithmatex">\(s\)</span> is negative, adjust it to be non-negative by adding <span class="arithmatex">\(k\)</span> and taking modulo <span class="arithmatex">\(k\)</span> again.</p>
86196+
<p>Note: Since the value of <span class="arithmatex">\(s\)</span> can be negative, we can add <span class="arithmatex">\(k\)</span> to the result of <span class="arithmatex">\(s \bmod k\)</span> and then take modulo <span class="arithmatex">\(k\)</span> again to ensure that the value of <span class="arithmatex">\(s\)</span> is non-negative.</p>
8622686197
</blockquote>
86227-
<p>The time complexity is <span class="arithmatex">\(O(n)\)</span> and space complexity is <span class="arithmatex">\(O(n)\)</span> where <span class="arithmatex">\(n\)</span> is the length of the array <span class="arithmatex">\(nums\)</span>.</p>
86198+
<p>The time complexity is <span class="arithmatex">\(O(n)\)</span>, and the space complexity is <span class="arithmatex">\(O(n)\)</span>. Here, <span class="arithmatex">\(n\)</span> is the length of the array <span class="arithmatex">\(\textit{nums}\)</span>.</p>
8622886199
<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>
8622986200
<div class="tabbed-content">
8623086201
<div class="tabbed-block">
@@ -86334,18 +86305,14 @@ <h3 id="solution-1-hash-table-prefix-sum">Solution 1: Hash Table + Prefix Sum</h
8633486305
<span class="normal"> 8</span>
8633586306
<span class="normal"> 9</span>
8633686307
<span class="normal">10</span>
86337-
<span class="normal">11</span>
86338-
<span class="normal">12</span>
86339-
<span class="normal">13</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">subarraysDivByK</span><span class="p">(</span><span class="nx">nums</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[],</span><span class="w"> </span><span class="nx">k</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
86340-
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">counter</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Map</span><span class="p">();</span>
86341-
<span class="w"> </span><span class="nx">counter</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="mf">0</span><span class="p">,</span><span class="w"> </span><span class="mf">1</span><span class="p">);</span>
86342-
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">,</span>
86343-
<span class="w"> </span><span class="nx">ans</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
86344-
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">const</span><span class="w"> </span><span class="nx">num</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nx">nums</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
86345-
<span class="w"> </span><span class="nx">s</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nx">num</span><span class="p">;</span>
86346-
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">t</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">((</span><span class="nx">s</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="nx">k</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">k</span><span class="p">)</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="nx">k</span><span class="p">;</span>
86347-
<span class="w"> </span><span class="nx">ans</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nx">counter</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">t</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
86348-
<span class="w"> </span><span class="nx">counter</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="nx">t</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="nx">counter</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">t</span><span class="p">)</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">);</span>
86308+
<span class="normal">11</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">subarraysDivByK</span><span class="p">(</span><span class="nx">nums</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[],</span><span class="w"> </span><span class="nx">k</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">)</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">{</span>
86309+
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">cnt</span><span class="o">:</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="p">[</span><span class="nx">key</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">]</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="w"> </span><span class="p">}</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="nx">0</span><span class="o">:</span><span class="w"> </span><span class="kt">1</span><span class="w"> </span><span class="p">};</span>
86310+
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
86311+
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">ans</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
86312+
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">const</span><span class="w"> </span><span class="nx">x</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nx">nums</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
86313+
<span class="w"> </span><span class="nx">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(((</span><span class="nx">s</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">x</span><span class="p">)</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="nx">k</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">k</span><span class="p">)</span><span class="w"> </span><span class="o">%</span><span class="w"> </span><span class="nx">k</span><span class="p">;</span>
86314+
<span class="w"> </span><span class="nx">ans</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="nx">cnt</span><span class="p">[</span><span class="nx">s</span><span class="p">]</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="mf">0</span><span class="p">;</span>
86315+
<span class="w"> </span><span class="nx">cnt</span><span class="p">[</span><span class="nx">s</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">cnt</span><span class="p">[</span><span class="nx">s</span><span class="p">]</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="mf">0</span><span class="p">)</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">;</span>
8634986316
<span class="w"> </span><span class="p">}</span>
8635086317
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">ans</span><span class="p">;</span>
8635186318
<span class="p">}</span>
@@ -86384,14 +86351,14 @@ <h3 id="solution-1-hash-table-prefix-sum">Solution 1: Hash Table + Prefix Sum</h
8638486351

8638586352
<nav>
8638686353

86387-
<a href="https://github.com/Maddieee" class="md-author" title="@Maddieee">
86354+
<a href="https://github.com/yanglbme" class="md-author" title="@yanglbme">
8638886355

86389-
<img src="https://avatars.githubusercontent.com/u/10874742?v=4&size=72" alt="Maddieee">
86356+
<img src="https://avatars.githubusercontent.com/u/21008209?v=4&size=72" alt="yanglbme">
8639086357
</a>
8639186358

86392-
<a href="https://github.com/yanglbme" class="md-author" title="@yanglbme">
86359+
<a href="https://github.com/Maddieee" class="md-author" title="@Maddieee">
8639386360

86394-
<img src="https://avatars.githubusercontent.com/u/21008209?v=4&size=72" alt="yanglbme">
86361+
<img src="https://avatars.githubusercontent.com/u/10874742?v=4&size=72" alt="Maddieee">
8639586362
</a>
8639686363

8639786364
<a href="https://github.com/thinkasany" class="md-author" title="@thinkasany">

0 commit comments

Comments
 (0)