|
61890 | 61890 | <ul class="md-nav__list">
|
61891 | 61891 |
|
61892 | 61892 | <li class="md-nav__item">
|
61893 |
| - <a href="#solution-1" class="md-nav__link"> |
| 61893 | + <a href="#solution-1-hash-table" class="md-nav__link"> |
61894 | 61894 | <span class="md-ellipsis">
|
61895 |
| - Solution 1 |
| 61895 | + Solution 1: Hash Table |
61896 | 61896 | </span>
|
61897 | 61897 | </a>
|
61898 | 61898 |
|
@@ -75708,7 +75708,7 @@ <h2 id="description">Description</h2>
|
75708 | 75708 | <h2 id="solutions">Solutions</h2>
|
75709 | 75709 | <!-- solution:start -->
|
75710 | 75710 |
|
75711 |
| -<h3 id="solution-1">Solution 1</h3> |
| 75711 | +<h3 id="solution-1-hash-table">Solution 1: Hash Table</h3> |
75712 | 75712 | <div class="tabbed-set tabbed-alternate" data-tabs="1:1"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">TypeScript</label></div>
|
75713 | 75713 | <div class="tabbed-content">
|
75714 | 75714 | <div class="tabbed-block">
|
@@ -75747,47 +75747,33 @@ <h3 id="solution-1">Solution 1</h3>
|
75747 | 75747 | <span class="normal">33</span>
|
75748 | 75748 | <span class="normal">34</span>
|
75749 | 75749 | <span class="normal">35</span>
|
75750 |
| -<span class="normal">36</span> |
75751 |
| -<span class="normal">37</span> |
75752 |
| -<span class="normal">38</span> |
75753 |
| -<span class="normal">39</span> |
75754 |
| -<span class="normal">40</span> |
75755 |
| -<span class="normal">41</span> |
75756 |
| -<span class="normal">42</span> |
75757 |
| -<span class="normal">43</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">class</span><span class="w"> </span><span class="nx">TimeLimitedCache</span><span class="w"> </span><span class="p">{</span> |
75758 |
| -<span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="nx">cache</span><span class="o">:</span><span class="w"> </span><span class="kt">Map</span><span class="o"><</span><span class="kt">number</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="nx">value</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">expire</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="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Map</span><span class="p">();</span> |
75759 |
| - |
75760 |
| -<span class="w"> </span><span class="kr">constructor</span><span class="p">()</span><span class="w"> </span><span class="p">{}</span> |
| 75750 | +<span class="normal">36</span></pre></div></td><td class="code"><div><pre><span></span><code><span class="kd">class</span><span class="w"> </span><span class="nx">TimeLimitedCache</span><span class="w"> </span><span class="p">{</span> |
| 75751 | +<span class="w"> </span><span class="err">#</span><span class="nx">cache</span><span class="o">:</span><span class="w"> </span><span class="kt">Map</span><span class="o"><</span><span class="kt">number</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="nx">value</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">expire</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="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Map</span><span class="p">();</span> |
75761 | 75752 |
|
75762 | 75753 | <span class="w"> </span><span class="nx">set</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="w"> </span><span class="nx">value</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">duration</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">boolean</span><span class="w"> </span><span class="p">{</span>
|
75763 |
| -<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">removeExpire</span><span class="p">();</span> |
75764 |
| -<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="k">this</span><span class="p">.</span><span class="nx">cache</span><span class="p">.</span><span class="nx">has</span><span class="p">(</span><span class="nx">key</span><span class="p">);</span> |
75765 |
| -<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">cache</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="nx">value</span><span class="p">,</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">now</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">duration</span><span class="p">]);</span> |
75766 |
| -<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">ans</span><span class="p">;</span> |
| 75754 | +<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">isExist</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">cache</span><span class="p">.</span><span class="nx">has</span><span class="p">(</span><span class="nx">key</span><span class="p">);</span> |
| 75755 | + |
| 75756 | +<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">isExpired</span><span class="p">(</span><span class="nx">key</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> |
| 75757 | +<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">cache</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="nx">key</span><span class="p">,</span><span class="w"> </span><span class="p">[</span><span class="nx">value</span><span class="p">,</span><span class="w"> </span><span class="nb">Date</span><span class="p">.</span><span class="nx">now</span><span class="p">()</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="nx">duration</span><span class="p">]);</span> |
| 75758 | +<span class="w"> </span><span class="p">}</span> |
| 75759 | + |
| 75760 | +<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">isExist</span><span class="p">;</span> |
75767 | 75761 | <span class="w"> </span><span class="p">}</span>
|
75768 | 75762 |
|
75769 | 75763 | <span class="w"> </span><span class="nx">get</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>
|
75770 |
| -<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">removeExpire</span><span class="p">();</span> |
75771 |
| -<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">cache</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span><span class="o">?</span><span class="p">.[</span><span class="mf">0</span><span class="p">]</span><span class="w"> </span><span class="o">??</span><span class="w"> </span><span class="o">-</span><span class="mf">1</span><span class="p">;</span> |
| 75764 | +<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">isExpired</span><span class="p">(</span><span class="nx">key</span><span class="p">))</span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="mf">1</span><span class="p">;</span> |
| 75765 | +<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">res</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">cache</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span><span class="o">?</span><span class="p">.[</span><span class="mf">0</span><span class="p">]</span><span class="w"> </span><span class="o">??</span><span class="w"> </span><span class="o">-</span><span class="mf">1</span><span class="p">;</span> |
| 75766 | +<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">res</span><span class="p">;</span> |
75772 | 75767 | <span class="w"> </span><span class="p">}</span>
|
75773 | 75768 |
|
75774 | 75769 | <span class="w"> </span><span class="nx">count</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>
|
75775 |
| -<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">removeExpire</span><span class="p">();</span> |
75776 |
| -<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">cache</span><span class="p">.</span><span class="nx">size</span><span class="p">;</span> |
75777 |
| -<span class="w"> </span><span class="p">}</span> |
75778 |
| - |
75779 |
| -<span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="nx">now</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> |
75780 |
| -<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nb">Date</span><span class="p">().</span><span class="nx">getTime</span><span class="p">();</span> |
| 75770 | +<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">xs</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">Array</span><span class="p">.</span><span class="kr">from</span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">cache</span><span class="p">).</span><span class="nx">filter</span><span class="p">(([</span><span class="nx">key</span><span class="p">])</span><span class="w"> </span><span class="p">=></span><span class="w"> </span><span class="o">!</span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">isExpired</span><span class="p">(</span><span class="nx">key</span><span class="p">));</span> |
| 75771 | +<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="nx">xs</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> |
75781 | 75772 | <span class="w"> </span><span class="p">}</span>
|
75782 | 75773 |
|
75783 |
| -<span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="nx">removeExpire</span><span class="p">()</span><span class="o">:</span><span class="w"> </span><span class="ow">void</span><span class="w"> </span><span class="p">{</span> |
75784 |
| -<span class="w"> </span><span class="kd">const</span><span class="w"> </span><span class="nx">now</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">now</span><span class="p">();</span> |
75785 |
| -<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">key</span><span class="p">,</span><span class="w"> </span><span class="p">[,</span><span class="w"> </span><span class="nx">expire</span><span class="p">]]</span><span class="w"> </span><span class="k">of</span><span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">cache</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
75786 |
| -<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="nx">expire</span><span class="w"> </span><span class="o"><=</span><span class="w"> </span><span class="nx">now</span><span class="p">)</span><span class="w"> </span><span class="p">{</span> |
75787 |
| -<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="nx">cache</span><span class="p">.</span><span class="ow">delete</span><span class="p">(</span><span class="nx">key</span><span class="p">);</span> |
75788 |
| -<span class="w"> </span><span class="p">}</span> |
75789 |
| -<span class="w"> </span><span class="p">}</span> |
75790 |
| -<span class="w"> </span><span class="p">}</span> |
| 75774 | +<span class="w"> </span><span class="err">#</span><span class="nx">isExpired</span><span class="w"> </span><span class="o">=</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="w"> </span><span class="p">=></span> |
| 75775 | +<span class="w"> </span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">cache</span><span class="p">.</span><span class="nx">has</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span><span class="w"> </span><span class="o">&&</span> |
| 75776 | +<span class="w"> </span><span class="p">(</span><span class="k">this</span><span class="p">.</span><span class="err">#</span><span class="nx">cache</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="nx">key</span><span class="p">)</span><span class="o">?</span><span class="p">.[</span><span class="mf">1</span><span class="p">]</span><span class="w"> </span><span class="o">??</span><span class="w"> </span><span class="nb">Number</span><span class="p">.</span><span class="nx">NEGATIVE_INFINITY</span><span class="p">)</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nb">Date</span><span class="p">.</span><span class="nx">now</span><span class="p">();</span> |
75791 | 75777 | <span class="p">}</span>
|
75792 | 75778 |
|
75793 | 75779 | <span class="cm">/**</span>
|
@@ -75832,6 +75818,11 @@ <h3 id="solution-1">Solution 1</h3>
|
75832 | 75818 |
|
75833 | 75819 | <nav>
|
75834 | 75820 |
|
| 75821 | + <a href="https://github.com/rain84" class="md-author" title="@rain84"> |
| 75822 | + |
| 75823 | + <img src="https://avatars.githubusercontent.com/u/1732547?v=4&size=72" alt="rain84"> |
| 75824 | + </a> |
| 75825 | + |
75835 | 75826 | <a href="https://github.com/yanglbme" class="md-author" title="@yanglbme">
|
75836 | 75827 |
|
75837 | 75828 | <img src="https://avatars.githubusercontent.com/u/21008209?v=4&size=72" alt="yanglbme">
|
|
0 commit comments