34544
34544
<ul class="md-nav__list">
34545
34545
34546
34546
<li class="md-nav__item">
34547
- <a href="#solution-1" class="md-nav__link">
34547
+ <a href="#solution-1-prefix-xor " class="md-nav__link">
34548
34548
<span class="md-ellipsis">
34549
- Solution 1
34549
+ Solution 1: Prefix XOR
34550
34550
</span>
34551
34551
</a>
34552
34552
@@ -78045,17 +78045,17 @@ <h2 id="description">Description</h2>
78045
78045
78046
78046
<pre>
78047
78047
<strong>Input:</strong> arr = [1,3,4,8], queries = [[0,1],[1,2],[0,3],[3,3]]
78048
- <strong>Output:</strong> [2,7,14,8]
78049
- <strong>Explanation:</strong>
78048
+ <strong>Output:</strong> [2,7,14,8]
78049
+ <strong>Explanation:</strong>
78050
78050
The binary representation of the elements in the array are:
78051
- 1 = 0001
78052
- 3 = 0011
78053
- 4 = 0100
78054
- 8 = 1000
78051
+ 1 = 0001
78052
+ 3 = 0011
78053
+ 4 = 0100
78054
+ 8 = 1000
78055
78055
The XOR values for queries are:
78056
- [0,1] = 1 xor 3 = 2
78057
- [1,2] = 3 xor 4 = 7
78058
- [0,3] = 1 xor 3 xor 4 xor 8 = 14
78056
+ [0,1] = 1 xor 3 = 2
78057
+ [1,2] = 3 xor 4 = 7
78058
+ [0,3] = 1 xor 3 xor 4 xor 8 = 14
78059
78059
[3,3] = 8
78060
78060
</pre>
78061
78061
@@ -78081,7 +78081,16 @@ <h2 id="description">Description</h2>
78081
78081
<h2 id="solutions">Solutions</h2>
78082
78082
<!-- solution:start -->
78083
78083
78084
- <h3 id="solution-1">Solution 1</h3>
78084
+ <h3 id="solution-1-prefix-xor">Solution 1: Prefix XOR</h3>
78085
+ <p>We can use a prefix XOR array $s$ of length $n+1$ to store the prefix XOR results of the array $\textit{arr}$, where $s[i] = s[i-1] \oplus \textit{arr}[i-1]$. That is, $s[i]$ represents the XOR result of the first $i$ elements of $\textit{arr}$.</p>
78086
+ <p>For a query $[l, r]$, we can obtain:</p>
78087
+ <p>$$
78088
+ \begin{aligned}
78089
+ \textit{arr}[l] \oplus \textit{arr}[l+1] \oplus \cdots \oplus \textit{arr}[r] &= (\textit{arr}[0] \oplus \textit{arr}[1] \oplus \cdots \oplus \textit{arr}[l-1]) \oplus (\textit{arr}[0] \oplus \textit{arr}[1] \oplus \cdots \oplus \textit{arr}[r]) \
78090
+ &= s[l] \oplus s[r+1]
78091
+ \end{aligned}
78092
+ $$</p>
78093
+ <p>Time complexity is $O(n+m)$, and space complexity is $O(n)$. Here, $n$ and $m$ are the lengths of the array $\textit{arr}$ and the query array $\textit{queries}$, respectively.</p>
78085
78094
<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">JavaScript</label></div>
78086
78095
<div class="tabbed-content">
78087
78096
<div class="tabbed-block">
@@ -78191,28 +78200,20 @@ <h3 id="solution-1">Solution 1</h3>
78191
78200
</code></pre></div></td></tr></table></div>
78192
78201
</div>
78193
78202
<div class="tabbed-block">
78194
- <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
78195
- <span class="normal"> 2</span>
78196
- <span class="normal"> 3</span>
78197
- <span class="normal"> 4</span>
78198
- <span class="normal"> 5</span>
78199
- <span class="normal"> 6</span>
78200
- <span class="normal"> 7</span>
78201
- <span class="normal"> 8</span>
78202
- <span class="normal"> 9</span>
78203
- <span class="normal">10</span>
78204
- <span class="normal">11</span>
78205
- <span class="normal">12</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">xorQueries</span><span class="p">(</span><span class="nx">arr</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">queries</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="p">[]</span><span class="w"> </span><span class="p">{</span>
78203
+ <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal">1</span>
78204
+ <span class="normal">2</span>
78205
+ <span class="normal">3</span>
78206
+ <span class="normal">4</span>
78207
+ <span class="normal">5</span>
78208
+ <span class="normal">6</span>
78209
+ <span class="normal">7</span>
78210
+ <span class="normal">8</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">function</span><span class="w"> </span><span class="nx">xorQueries</span><span class="p">(</span><span class="nx">arr</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">queries</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="p">[]</span><span class="w"> </span><span class="p">{</span>
78206
78211
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">arr</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span>
78207
- <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">s</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</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">Array</span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">).</span><span class="nx">fill</span><span class="p">(</span><span class="mf">0</span><span class="p">);</span>
78212
+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">s</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">).</span><span class="nx">fill</span><span class="p">(</span><span class="mf">0</span><span class="p">);</span>
78208
78213
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</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="nx">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">n</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
78209
78214
<span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="nx">arr</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
78210
78215
<span class="w"> </span><span class="p">}</span>
78211
- <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">ans</span><span class="o">:</span><span class="w"> </span><span class="kt">number</span><span class="p">[]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[];</span>
78212
- <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="p">[</span><span class="nx">l</span><span class="p">,</span><span class="w"> </span><span class="nx">r</span><span class="p">]</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nx">queries</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
78213
- <span class="w"> </span><span class="nx">ans</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">s</span><span class="p">[</span><span class="nx">r</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">l</span><span class="p">]);</span>
78214
- <span class="w"> </span><span class="p">}</span>
78215
- <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">ans</span><span class="p">;</span>
78216
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">queries</span><span class="p">.</span><span class="nx">map</span><span class="p">(([</span><span class="nx">l</span><span class="p">,</span><span class="w"> </span><span class="nx">r</span><span class="p">])</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">r</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">l</span><span class="p">]);</span>
78216
78217
<span class="p">}</span>
78217
78218
</code></pre></div></td></tr></table></div>
78218
78219
</div>
@@ -78229,26 +78230,18 @@ <h3 id="solution-1">Solution 1</h3>
78229
78230
<span class="normal">10</span>
78230
78231
<span class="normal">11</span>
78231
78232
<span class="normal">12</span>
78232
- <span class="normal">13</span>
78233
- <span class="normal">14</span>
78234
- <span class="normal">15</span>
78235
- <span class="normal">16</span>
78236
- <span class="normal">17</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="cm">/**</span>
78233
+ <span class="normal">13</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="cm">/**</span>
78237
78234
<span class="cm"> * @param {number[]} arr</span>
78238
78235
<span class="cm"> * @param {number[][]} queries</span>
78239
78236
<span class="cm"> * @return {number[]}</span>
78240
78237
<span class="cm"> */</span>
78241
78238
<span class="kd">var</span><span class="w"> </span><span class="nx">xorQueries</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="p">(</span><span class="nx">arr</span><span class="p">,</span><span class="w"> </span><span class="nx">queries</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
78242
78239
<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">arr</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span>
78243
- <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">s</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">Array</span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">).</span><span class="nx">fill</span><span class="p">(</span><span class="mf">0</span><span class="p">);</span>
78240
+ <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">s</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">(</span><span class="nx">n</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">).</span><span class="nx">fill</span><span class="p">(</span><span class="mf">0</span><span class="p">);</span>
78244
78241
<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="kd">let</span><span class="w"> </span><span class="nx">i</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="nx">i</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">n</span><span class="p">;</span><span class="w"> </span><span class="o">++</span><span class="nx">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
78245
78242
<span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">i</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="nx">arr</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span>
78246
78243
<span class="w"> </span><span class="p">}</span>
78247
- <span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">ans</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">[];</span>
78248
- <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="p">[</span><span class="nx">l</span><span class="p">,</span><span class="w"> </span><span class="nx">r</span><span class="p">]</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="nx">queries</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
78249
- <span class="w"> </span><span class="nx">ans</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">s</span><span class="p">[</span><span class="nx">r</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">l</span><span class="p">]);</span>
78250
- <span class="w"> </span><span class="p">}</span>
78251
- <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">ans</span><span class="p">;</span>
78244
+ <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">queries</span><span class="p">.</span><span class="nx">map</span><span class="p">(([</span><span class="nx">l</span><span class="p">,</span><span class="w"> </span><span class="nx">r</span><span class="p">])</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">r</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="nx">s</span><span class="p">[</span><span class="nx">l</span><span class="p">]);</span>
78252
78245
<span class="p">};</span>
78253
78246
</code></pre></div></td></tr></table></div>
78254
78247
</div>
0 commit comments