|
42069 | 42069 | <ul class="md-nav__list">
|
42070 | 42070 |
|
42071 | 42071 | <li class="md-nav__item">
|
42072 |
| - <a href="#solution-1" class="md-nav__link"> |
| 42072 | + <a href="#solution-1-hash-map" class="md-nav__link"> |
42073 | 42073 | <span class="md-ellipsis">
|
42074 |
| - Solution 1 |
| 42074 | + Solution 1: Hash Map |
42075 | 42075 | </span>
|
42076 | 42076 | </a>
|
42077 | 42077 |
|
@@ -87299,8 +87299,11 @@ <h2 id="description">Description</h2>
|
87299 | 87299 | <h2 id="solutions">Solutions</h2>
|
87300 | 87300 | <!-- solution:start -->
|
87301 | 87301 |
|
87302 |
| -<h3 id="solution-1">Solution 1</h3> |
87303 |
| -<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> |
| 87302 | +<h3 id="solution-1-hash-map">Solution 1: Hash Map</h3> |
| 87303 | +<p>We use a hash map <span class="arithmatex">\(d\)</span> to store non-zero elements, where the key is the index, and the value is the corresponding value. We iterate through <span class="arithmatex">\(\textit{nums}\)</span>, and if <span class="arithmatex">\(\textit{nums}[i]\)</span> is not <span class="arithmatex">\(0\)</span>, we add <span class="arithmatex">\((i, \textit{nums}[i])\)</span> to the hash map <span class="arithmatex">\(d\)</span>.</p> |
| 87304 | +<p>When calculating the dot product, we iterate through the hash map with fewer non-zero elements and check if the other hash map contains the corresponding key. If it exists, we multiply the corresponding values and add them to the result.</p> |
| 87305 | +<p>The time complexity is <span class="arithmatex">\(O(n)\)</span>, and the space complexity is <span class="arithmatex">\(O(n)\)</span>, where <span class="arithmatex">\(n\)</span> is the length of the array.</p> |
| 87306 | +<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> |
87304 | 87307 | <div class="tabbed-content">
|
87305 | 87308 | <div class="tabbed-block">
|
87306 | 87309 | <div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span>
|
@@ -87614,6 +87617,78 @@ <h3 id="solution-1">Solution 1</h3>
|
87614 | 87617 | <span class="cm"> */</span>
|
87615 | 87618 | </code></pre></div></td></tr></table></div>
|
87616 | 87619 | </div>
|
| 87620 | +<div class="tabbed-block"> |
| 87621 | +<div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span></span><span class="normal"> 1</span> |
| 87622 | +<span class="normal"> 2</span> |
| 87623 | +<span class="normal"> 3</span> |
| 87624 | +<span class="normal"> 4</span> |
| 87625 | +<span class="normal"> 5</span> |
| 87626 | +<span class="normal"> 6</span> |
| 87627 | +<span class="normal"> 7</span> |
| 87628 | +<span class="normal"> 8</span> |
| 87629 | +<span class="normal"> 9</span> |
| 87630 | +<span class="normal">10</span> |
| 87631 | +<span class="normal">11</span> |
| 87632 | +<span class="normal">12</span> |
| 87633 | +<span class="normal">13</span> |
| 87634 | +<span class="normal">14</span> |
| 87635 | +<span class="normal">15</span> |
| 87636 | +<span class="normal">16</span> |
| 87637 | +<span class="normal">17</span> |
| 87638 | +<span class="normal">18</span> |
| 87639 | +<span class="normal">19</span> |
| 87640 | +<span class="normal">20</span> |
| 87641 | +<span class="normal">21</span> |
| 87642 | +<span class="normal">22</span> |
| 87643 | +<span class="normal">23</span> |
| 87644 | +<span class="normal">24</span> |
| 87645 | +<span class="normal">25</span> |
| 87646 | +<span class="normal">26</span> |
| 87647 | +<span class="normal">27</span> |
| 87648 | +<span class="normal">28</span> |
| 87649 | +<span class="normal">29</span> |
| 87650 | +<span class="normal">30</span> |
| 87651 | +<span class="normal">31</span> |
| 87652 | +<span class="normal">32</span> |
| 87653 | +<span class="normal">33</span> |
| 87654 | +<span class="normal">34</span> |
| 87655 | +<span class="normal">35</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="k">use</span><span class="w"> </span><span class="n">std</span><span class="p">::</span><span class="n">collections</span><span class="p">::</span><span class="n">HashMap</span><span class="p">;</span> |
| 87656 | + |
| 87657 | +<span class="cp">#[derive(Clone)]</span> |
| 87658 | +<span class="k">struct</span><span class="w"> </span><span class="nc">SparseVector</span><span class="w"> </span><span class="p">{</span> |
| 87659 | +<span class="w"> </span><span class="n">d</span><span class="p">:</span><span class="w"> </span><span class="nc">HashMap</span><span class="o"><</span><span class="kt">usize</span><span class="p">,</span><span class="w"> </span><span class="kt">i32</span><span class="o">></span><span class="p">,</span> |
| 87660 | +<span class="p">}</span> |
| 87661 | + |
| 87662 | +<span class="k">impl</span><span class="w"> </span><span class="n">SparseVector</span><span class="w"> </span><span class="p">{</span> |
| 87663 | +<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">new</span><span class="p">(</span><span class="n">nums</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="nc">Self</span><span class="w"> </span><span class="p">{</span> |
| 87664 | +<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">d</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">HashMap</span><span class="p">::</span><span class="n">new</span><span class="p">();</span> |
| 87665 | +<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">nums</span><span class="p">.</span><span class="n">iter</span><span class="p">().</span><span class="n">enumerate</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> |
| 87666 | +<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="p">{</span> |
| 87667 | +<span class="w"> </span><span class="n">d</span><span class="p">.</span><span class="n">insert</span><span class="p">(</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="n">x</span><span class="p">);</span> |
| 87668 | +<span class="w"> </span><span class="p">}</span> |
| 87669 | +<span class="w"> </span><span class="p">}</span> |
| 87670 | +<span class="w"> </span><span class="n">SparseVector</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="n">d</span><span class="w"> </span><span class="p">}</span> |
| 87671 | +<span class="w"> </span><span class="p">}</span> |
| 87672 | + |
| 87673 | +<span class="w"> </span><span class="k">fn</span><span class="w"> </span><span class="nf">dot_product</span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">,</span><span class="w"> </span><span class="n">vec</span><span class="p">:</span><span class="w"> </span><span class="nc">SparseVector</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> |
| 87674 | +<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="w"> </span><span class="n">b</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="bp">self</span><span class="p">.</span><span class="n">d</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">vec</span><span class="p">.</span><span class="n">d</span><span class="p">);</span> |
| 87675 | +<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> |
| 87676 | + |
| 87677 | +<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">len</span><span class="p">()</span><span class="w"> </span><span class="o">></span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">len</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> |
| 87678 | +<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">vec</span><span class="p">.</span><span class="n">dot_product</span><span class="p">(</span><span class="bp">self</span><span class="p">.</span><span class="n">clone</span><span class="p">());</span> |
| 87679 | +<span class="w"> </span><span class="p">}</span> |
| 87680 | + |
| 87681 | +<span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="p">(</span><span class="o">&</span><span class="n">i</span><span class="p">,</span><span class="w"> </span><span class="o">&</span><span class="n">x</span><span class="p">)</span><span class="w"> </span><span class="k">in</span><span class="w"> </span><span class="n">a</span><span class="p">.</span><span class="n">iter</span><span class="p">()</span><span class="w"> </span><span class="p">{</span> |
| 87682 | +<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="o">&</span><span class="n">y</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">b</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="o">&</span><span class="n">i</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
| 87683 | +<span class="w"> </span><span class="n">ans</span><span class="w"> </span><span class="o">+=</span><span class="w"> </span><span class="n">x</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">y</span><span class="p">;</span> |
| 87684 | +<span class="w"> </span><span class="p">}</span> |
| 87685 | +<span class="w"> </span><span class="p">}</span> |
| 87686 | + |
| 87687 | +<span class="w"> </span><span class="n">ans</span> |
| 87688 | +<span class="w"> </span><span class="p">}</span> |
| 87689 | +<span class="p">}</span> |
| 87690 | +</code></pre></div></td></tr></table></div> |
| 87691 | +</div> |
87617 | 87692 | </div>
|
87618 | 87693 | </div>
|
87619 | 87694 | <!-- solution:end -->
|
|
0 commit comments