<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>长路</title>
  
  <subtitle>归去，也无风雨也无晴</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://cir99.github.io/"/>
  <updated>2018-03-11T16:15:21.196Z</updated>
  <id>https://cir99.github.io/</id>
  
  <author>
    <name>coach chen</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>记自己一个大乌龙</title>
    <link href="https://cir99.github.io/2018/03/11/%E8%AE%B0%E8%87%AA%E5%B7%B1%E4%B8%80%E4%B8%AA%E5%A4%A7%E4%B9%8C%E9%BE%99/"/>
    <id>https://cir99.github.io/2018/03/11/记自己一个大乌龙/</id>
    <published>2018-03-11T15:57:28.000Z</published>
    <updated>2018-03-11T16:15:21.196Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： JavaScript</p><hr><p>本人折腾了一个很简单的算法，但一直出错。有点没头绪，突然发现自己可能发生了一个大乌龙。<strong>JavaScript的数组索引不能取负数。</strong>因为，自己先有接触过python的语法。python的数组索引可以取负数，例如arr[-1]就是指取数组的最后一位，也就是倒数第一位。直至今天：<br><a id="more"></a><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> arr=[<span class="number">1</span>,<span class="number">2</span>,<span class="number">3</span>];</span><br><span class="line"><span class="comment">//underfined</span></span><br><span class="line"><span class="built_in">console</span>.log(arr[<span class="number">-1</span>]);</span><br></pre></td></tr></table></figure></p><p>才发现自己闹出个大笑话。</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： JavaScript&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;本人折腾了一个很简单的算法，但一直出错。有点没头绪，突然发现自己可能发生了一个大乌龙。&lt;strong&gt;JavaScript的数组索引不能取负数。&lt;/strong&gt;因为，自己先有接触过python的语法。python的数组索引可以取负数，例如arr[-1]就是指取数组的最后一位，也就是倒数第一位。直至今天：&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>记录字符串出现最多次数</title>
    <link href="https://cir99.github.io/2018/03/09/%E8%AE%B0%E5%BD%95%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%87%BA%E7%8E%B0%E6%9C%80%E5%A4%9A%E6%AC%A1%E6%95%B0/"/>
    <id>https://cir99.github.io/2018/03/09/记录字符串出现最多次数/</id>
    <published>2018-03-09T08:01:10.000Z</published>
    <updated>2018-03-09T08:02:17.447Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： javascipt</p><hr><p>直接放代码<br><a id="more"></a><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> x = <span class="string">"hiohadlkioyiyimfia"</span>;</span><br><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">count</span>(<span class="params">str</span>)</span>&#123;</span><br><span class="line">  <span class="keyword">var</span> obj = &#123;&#125;;</span><br><span class="line">  <span class="keyword">for</span>(<span class="keyword">var</span> i=<span class="number">0</span>;i&lt;str.length;i++)&#123;</span><br><span class="line">    <span class="keyword">if</span>(!obj[str.charAt(i)])&#123;</span><br><span class="line">       obj[str.charAt(i)] = <span class="number">1</span>;</span><br><span class="line">    &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">      obj[str.charAt(i)]++;</span><br><span class="line">    &#125;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">return</span> <span class="built_in">Object</span>.entries(obj).map(<span class="function"><span class="params">i</span>=&gt;</span>i[<span class="number">1</span>]).sort(<span class="function">(<span class="params">a, b</span>) =&gt;</span> b - a)[<span class="number">0</span>];</span><br><span class="line">    <span class="comment">// return Object.entries(obj).map(i=&gt;i[1]).reduce((a,b)=&gt;a &gt; b ? a : b);</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">console</span>.log(count(x));</span><br></pre></td></tr></table></figure></p><p>全部修改为箭头函数<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> count=<span class="function">(<span class="params">str</span>)=&gt;</span> &#123;</span><br><span class="line">      <span class="keyword">let</span> obj=str.split(<span class="string">''</span>).reduce(<span class="function">(<span class="params">m, n</span>) =&gt;</span> (m[n]++ || (m[n] = <span class="number">1</span>), m), &#123;&#125;)</span><br><span class="line">      <span class="keyword">return</span> <span class="built_in">Object</span>.entries(obj).map(<span class="function"><span class="params">i</span>=&gt;</span>i[<span class="number">1</span>]).reduce(<span class="function">(<span class="params">a,b</span>)=&gt;</span>a &gt; b ? a : b);</span><br><span class="line">&#125;;</span><br><span class="line"><span class="keyword">var</span> x = <span class="string">"ayeiorewoajupoao"</span>;</span><br><span class="line"><span class="built_in">console</span>.log(count(x));</span><br></pre></td></tr></table></figure></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： javascipt&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;直接放代码&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>记录一道算法题的答案</title>
    <link href="https://cir99.github.io/2018/03/09/%E8%AE%B0%E5%BD%95%E4%B8%80%E9%81%93%E7%AE%97%E6%B3%95%E9%A2%98%E7%9A%84%E7%AD%94%E6%A1%88/"/>
    <id>https://cir99.github.io/2018/03/09/记录一道算法题的答案/</id>
    <published>2018-03-08T16:19:09.000Z</published>
    <updated>2018-03-08T16:19:10.038Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script>]]></content>
    
    <summary type="html">
    
      
      
        &lt;script src=&quot;/assets/js/APlayer.min.js&quot;&gt; &lt;/script&gt;
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>从一道不能用循环的问题开始</title>
    <link href="https://cir99.github.io/2018/03/06/%E4%BB%8E%E4%B8%80%E9%81%93%E4%B8%8D%E8%83%BD%E7%94%A8%E5%BE%AA%E7%8E%AF%E7%9A%84%E9%97%AE%E9%A2%98%E5%BC%80%E5%A7%8B/"/>
    <id>https://cir99.github.io/2018/03/06/从一道不能用循环的问题开始/</id>
    <published>2018-03-06T13:49:47.000Z</published>
    <updated>2018-03-06T16:04:17.421Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=33495226&auto=0&height=66"></iframe><p>标签： web JavaScript python</p><hr><p><a href="https://www.zhihu.com/question/41493194" target="_blank" rel="noopener">https://www.zhihu.com/question/41493194</a><br>这里说明一下，这题我早就见过很相似的题目，不用循环，创建一个长度为500，每个元素都为m的数组。<br>当时，我就确定了两个思路，一个是使用递归（至今都不会），一个是使用map。做法：<br><a id="more"></a></p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Array</span>(<span class="number">100</span>).map(<span class="function"><span class="params">e</span>=&gt;</span><span class="string">"m"</span>)</span><br></pre></td></tr></table></figure><p>结果，当然是出错了，数组是(100) [empty × 100]，这样的数组每个元素是undefined，是不能改变的。这样的数组叫稀释数组！直到今天，我在GitHub上看到这样的代码。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> chunk = <span class="function">(<span class="params">arr, size</span>) =&gt;</span></span><br><span class="line">  <span class="built_in">Array</span>.from(&#123; <span class="attr">length</span>: <span class="built_in">Math</span>.ceil(arr.length / size) &#125;, (v, i) =&gt;</span><br><span class="line">    arr.slice(i * size, i * size + size)</span><br><span class="line">  );</span><br><span class="line"></span><br><span class="line"><span class="comment">//[ [ 1, 2 ], [ 3, 4 ], [ 5 ] ]</span></span><br><span class="line"><span class="built_in">console</span>.log(chunk([<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>], <span class="number">2</span>));</span><br></pre></td></tr></table></figure><p>一开始我就懵了，这是闹哪样啊？我可没见过这样的es6语法啊，后在MDN上看Array.from的准确用法看到这样的例子。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Array</span>.from(&#123;<span class="attr">length</span>: <span class="number">5</span>&#125;, (v, i) =&gt; i);</span><br><span class="line"><span class="comment">// [0, 1, 2, 3, 4]</span></span><br></pre></td></tr></table></figure></p><p>灵机一动，这不就是我积压已久问题的答案吗？<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Array</span>.from(&#123;<span class="attr">length</span>: <span class="number">500</span>&#125;, (v) =&gt; <span class="string">"m"</span>);</span><br></pre></td></tr></table></figure></p><p>后来进行搜索到了知乎（逼乎），看到上面的链接，才知道上面是神仙打架。比较相似和简洁的答案<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">Array</span>.from(<span class="built_in">Array</span>(<span class="number">100</span>).keys())</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> or</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"> [...Array(<span class="number">100</span>).keys()]</span><br></pre></td></tr></table></figure></p><p>递归写法：<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">reduce</span>(<span class="params">prev, curr</span>) </span>&#123;</span><br><span class="line">  <span class="keyword">if</span> (curr &gt;= <span class="number">100</span>) &#123;</span><br><span class="line">    <span class="keyword">return</span> prev</span><br><span class="line">  &#125;</span><br><span class="line">  prev.push(curr)</span><br><span class="line">  <span class="keyword">return</span> reduce(prev, curr + <span class="number">1</span>)</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> arr = reduce([], <span class="number">0</span>)</span><br><span class="line"></span><br><span class="line"><span class="built_in">console</span>.log(arr);</span><br></pre></td></tr></table></figure></p><p>也有写一大串字符串，再用.split(‘’)组成数组（密集数组），再替换的（不推荐不简洁）<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="string">'1'</span>.repeat(<span class="number">100</span>).split(<span class="string">''</span>).map(<span class="function">(<span class="params">e,i</span>)=&gt;</span>e=i);</span><br><span class="line"></span><br><span class="line"><span class="built_in">Array</span>(<span class="number">100</span>).fill(<span class="number">0</span>).map(<span class="function">(<span class="params">item,index</span>)=&gt;</span>index);</span><br></pre></td></tr></table></figure></p><p>很搞事的idea<br>1&lt;&lt;24,也就是1向左移24位,也就是2的24次方,一共有25位，每个数组匹配4个1111，这样就有长度为100的字符串。<br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">(<span class="number">1</span>&lt;&lt;<span class="number">24</span>).toString(<span class="number">2</span>).replace(<span class="regexp">/\d/g</span>,<span class="string">'1111'</span>).split(<span class="string">''</span>).map(<span class="function">(<span class="params">e,i</span>)=&gt;</span>e=i);</span><br></pre></td></tr></table></figure></p><p>贴个python的来捣乱<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">print</span> range(<span class="number">1</span>,<span class="number">101</span>)</span><br></pre></td></tr></table></figure></p><p>还有很多方法，我还没有去研究，不过现在还是去看GitHub吧，远离逼乎！</p>]]></content>
    
    <summary type="html">
    
      &lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=33495226&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;


&lt;p&gt;标签： web JavaScript python&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;a href=&quot;https://www.zhihu.com/question/41493194&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.zhihu.com/question/41493194&lt;/a&gt;&lt;br&gt;这里说明一下，这题我早就见过很相似的题目，不用循环，创建一个长度为500，每个元素都为m的数组。&lt;br&gt;当时，我就确定了两个思路，一个是使用递归（至今都不会），一个是使用map。做法：&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>带缓动效果返回顶部的按钮</title>
    <link href="https://cir99.github.io/2018/03/06/%E5%B8%A6%E7%BC%93%E5%8A%A8%E6%95%88%E6%9E%9C%E8%BF%94%E5%9B%9E%E9%A1%B6%E9%83%A8%E7%9A%84%E6%8C%89%E9%92%AE/"/>
    <id>https://cir99.github.io/2018/03/06/带缓动效果返回顶部的按钮/</id>
    <published>2018-03-06T07:26:59.000Z</published>
    <updated>2018-03-06T07:31:23.255Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><h1 id="带缓动效果返回顶部的按钮"><a href="#带缓动效果返回顶部的按钮" class="headerlink" title="带缓动效果返回顶部的按钮"></a>带缓动效果返回顶部的按钮</h1><p>标签： web</p><hr><p><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=461864856&auto=0&height=66"></iframe><br>现在，当你浏览一个页面，滚动页面后会发现右下自动出现返回顶部按钮。其中我就很喜欢虎扑返回顶部按钮的设计（我应该是hupu最捞的JR吧）。<br><a id="more"></a><br><img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1fp348u6td0j201v01o3y9.jpg" alt=""></p><p>  由于这个原因，自己也对返回顶部比较陌生，看了张鑫旭老师的博客<br>  <a href="http://www.zhangxinxu.com/wordpress/2017/01/share-a-animation-algorithm-js/有了点想法，就自己试做了一下。下面放出主要代码（还有很多不足之处和不规范的地方等我日后再来完善吧）。" target="_blank" rel="noopener">http://www.zhangxinxu.com/wordpress/2017/01/share-a-animation-algorithm-js/有了点想法，就自己试做了一下。下面放出主要代码（还有很多不足之处和不规范的地方等我日后再来完善吧）。</a><br><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">html:</span><br><span class="line">  &lt;div <span class="class"><span class="keyword">class</span></span>=<span class="string">"goTop"</span>&gt;</span><br><span class="line">        &lt;!-- 注意backToTop()，不要忘记括号 --&gt;</span><br><span class="line">        &lt;div <span class="class"><span class="keyword">class</span></span>=<span class="string">"rocket"</span>&gt;</span><br><span class="line">          &lt;a <span class="class"><span class="keyword">class</span></span>=<span class="string">"clickTop"</span>onclick=<span class="string">"backToTop(6)"</span>&gt;</span><br><span class="line">            &lt;img src=<span class="string">"grey.png"</span> &gt;</span><br><span class="line">          &lt;<span class="regexp">/a&gt;</span></span><br><span class="line"><span class="regexp">          &lt;/</span>div&gt;</span><br><span class="line">      &lt;<span class="regexp">/div&gt;</span></span><br><span class="line"><span class="regexp">  &lt;/</span>div&gt;</span><br></pre></td></tr></table></figure></p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line">.goTop&#123;</span><br><span class="line">  <span class="comment">// 定位</span></span><br><span class="line">      display: block;</span><br><span class="line">      z-index: <span class="number">999</span>;</span><br><span class="line">      bottom: <span class="number">100</span>px;</span><br><span class="line">      position: fixed;</span><br><span class="line">      right: <span class="number">2</span>%</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    .clickTop&#123;</span><br><span class="line">      cursor: pointer;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    .clickTop:hover &#123;</span><br><span class="line">    content: url(red.png);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">var</span> show=<span class="built_in">document</span>.querySelector(<span class="string">'.clickTop'</span>);</span><br><span class="line"></span><br><span class="line"><span class="built_in">window</span>.onload=<span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line">      show.style.display = <span class="string">"none"</span>;</span><br><span class="line">&#125;</span><br><span class="line">  <span class="built_in">window</span>.onscroll = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line">  <span class="comment">//这样写不够简洁，现在精力不够日后再完善</span></span><br><span class="line">      <span class="keyword">if</span> (<span class="built_in">document</span>.documentElement.scrollTop + <span class="built_in">document</span>.body.scrollTop &gt; <span class="number">100</span>) &#123;</span><br><span class="line">      <span class="comment">//通过更改css属性来显示和隐藏</span></span><br><span class="line">          show.style.display = <span class="string">"block"</span>;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">else</span> &#123;</span><br><span class="line">        show.style.display = <span class="string">"none"</span>;</span><br><span class="line">      &#125;</span><br><span class="line">  &#125;</span><br><span class="line"></span><br><span class="line">  <span class="comment">// requestAnimationFrame的兼容处理</span></span><br><span class="line">  <span class="keyword">if</span> (!<span class="built_in">window</span>.requestAnimationFrame) &#123;</span><br><span class="line">  requestAnimationFrame = <span class="function"><span class="keyword">function</span>(<span class="params">fn</span>) </span>&#123;</span><br><span class="line">      setTimeout(fn, <span class="number">17</span>);</span><br><span class="line">  &#125;;</span><br><span class="line">  &#125;</span><br><span class="line"><span class="comment">// 滚动到顶部缓动实现</span></span><br><span class="line"><span class="comment">// rate表示缓动速率，默认是2</span></span><br><span class="line"><span class="keyword">var</span> backToTop = <span class="function"><span class="keyword">function</span> (<span class="params">rate</span>) </span>&#123;</span><br><span class="line"><span class="comment">//获取当前页面滚动条纵坐标的位置（可能为了浏览器的兼容）</span></span><br><span class="line">  <span class="keyword">var</span> doc = <span class="built_in">document</span>.body.scrollTop? <span class="built_in">document</span>.body : <span class="built_in">document</span>.documentElement;</span><br><span class="line">  <span class="keyword">var</span> scrollTop = doc.scrollTop;</span><br><span class="line">  <span class="keyword">var</span> top = <span class="function"><span class="keyword">function</span> (<span class="params"></span>) </span>&#123;</span><br><span class="line">   <span class="comment">// 默认为2</span></span><br><span class="line">      scrollTop = scrollTop + (<span class="number">0</span> - scrollTop) / (rate || <span class="number">2</span>);</span><br><span class="line"></span><br><span class="line">      <span class="comment">// 临界判断，终止动画</span></span><br><span class="line">      <span class="keyword">if</span> (scrollTop &lt; <span class="number">1</span>) &#123;</span><br><span class="line">          doc.scrollTop = <span class="number">0</span>;</span><br><span class="line">          <span class="keyword">return</span>;</span><br><span class="line">      &#125;</span><br><span class="line">      doc.scrollTop = scrollTop;</span><br><span class="line">      <span class="comment">// 动画gogogo!</span></span><br><span class="line">      <span class="comment">//回调函数</span></span><br><span class="line">      requestAnimationFrame(top);</span><br><span class="line">  &#125;;</span><br><span class="line">  top();</span><br><span class="line">  &#125;;</span><br></pre></td></tr></table></figure><p>网站应该使用的是jQuery来控制效果吧。确实jQuery调用函数控制会比较简单漂亮，不过我对jQuery很陌生就算了。</p>]]></content>
    
    <summary type="html">
    
      &lt;h1 id=&quot;带缓动效果返回顶部的按钮&quot;&gt;&lt;a href=&quot;#带缓动效果返回顶部的按钮&quot; class=&quot;headerlink&quot; title=&quot;带缓动效果返回顶部的按钮&quot;&gt;&lt;/a&gt;带缓动效果返回顶部的按钮&lt;/h1&gt;&lt;p&gt;标签： web&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=461864856&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;&lt;br&gt;现在，当你浏览一个页面，滚动页面后会发现右下自动出现返回顶部按钮。其中我就很喜欢虎扑返回顶部按钮的设计（我应该是hupu最捞的JR吧）。&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>css世界例子学习记录</title>
    <link href="https://cir99.github.io/2018/03/05/css%E4%B8%96%E7%95%8C%E4%BE%8B%E5%AD%90%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/"/>
    <id>https://cir99.github.io/2018/03/05/css世界例子学习记录/</id>
    <published>2018-03-05T09:32:02.000Z</published>
    <updated>2018-03-05T09:36:13.616Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： css 笔记</p><hr><p><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=28949390&auto=0&height=66"></iframe><br>此文作为个人阅读css世界的记录。<br><a id="more"></a><br>这是简单给图片添加透明遮罩层效果。<br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">meta</span> <span class="attr">http-equiv</span>=<span class="string">"X-UA-Compatible"</span> <span class="attr">content</span>=<span class="string">"ie=edge"</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">title</span>&gt;</span>Document<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">style</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">        .imgbox&#123;</span></span><br><span class="line"><span class="undefined">            width:200px;</span></span><br><span class="line"><span class="undefined">            height: 140px;</span></span><br><span class="line"><span class="undefined">            position:relative;</span></span><br><span class="line"><span class="undefined">            overflow: hidden;</span></span><br><span class="line"><span class="undefined">        &#125;</span></span><br><span class="line"><span class="undefined">        img&#123;</span></span><br><span class="line"><span class="undefined">            width:100%;</span></span><br><span class="line"><span class="undefined">        &#125;</span></span><br><span class="line"><span class="undefined">        .imgbox:after&#123;</span></span><br><span class="line"><span class="undefined">            position:absolute;</span></span><br><span class="line"><span class="undefined">            /* 不能少 */</span></span><br><span class="line"><span class="undefined">            left: 0;</span></span><br><span class="line"><span class="undefined">            top:0;</span></span><br><span class="line"><span class="undefined">            bottom: 0;</span></span><br><span class="line"><span class="undefined">            right: 0;</span></span><br><span class="line"><span class="undefined">            display: block;</span></span><br><span class="line"><span class="undefined">            width:50%;</span></span><br><span class="line"><span class="undefined">            height: 50%;</span></span><br><span class="line"><span class="undefined">            background-color: rgba(0, 0, 0, 0.5);</span></span><br><span class="line"><span class="undefined">            content: attr(data-text);</span></span><br><span class="line"><span class="undefined">            /* 应用了css世界p97中同时实现竖直和水平居中方法 */</span></span><br><span class="line"><span class="undefined">            margin:auto;</span></span><br><span class="line"><span class="undefined">            text-align: center;</span></span><br><span class="line"><span class="undefined">            /* 设置文字竖直居中 */</span></span><br><span class="line"><span class="undefined">            line-height: 70px;</span></span><br><span class="line"><span class="undefined">            transition: all 1s ease;</span></span><br><span class="line"><span class="undefined">            /* 改变遮罩层位置 */</span></span><br><span class="line"><span class="undefined">            transform: translateY(150%);</span></span><br><span class="line"><span class="undefined">            color: #FFF;</span></span><br><span class="line"><span class="undefined">        &#125;</span></span><br><span class="line"><span class="undefined">        .imgbox:hover:after&#123;</span></span><br><span class="line"><span class="undefined">            transform: translateY(0);</span></span><br><span class="line"><span class="undefined">        &#125;</span></span><br><span class="line"><span class="undefined">    </span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">div</span> <span class="attr">class</span>=<span class="string">"imgbox"</span> <span class="attr">data-text</span>=<span class="string">"hello"</span>&gt;</span></span><br><span class="line">            <span class="tag">&lt;<span class="name">img</span> <span class="attr">src</span>=<span class="string">"./1.jpg"</span> <span class="attr">alt</span>=<span class="string">""</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure></p><p>通过alt在图片还没加载就显示提示信息，还有用content更换图片。<br><figure class="highlight html"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE html&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">html</span> <span class="attr">lang</span>=<span class="string">"en"</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">head</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">meta</span> <span class="attr">charset</span>=<span class="string">"UTF-8"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">meta</span> <span class="attr">name</span>=<span class="string">"viewport"</span> <span class="attr">content</span>=<span class="string">"width=device-width, initial-scale=1.0"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">meta</span> <span class="attr">http-equiv</span>=<span class="string">"X-UA-Compatible"</span> <span class="attr">content</span>=<span class="string">"ie=edge"</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">title</span>&gt;</span>Document<span class="tag">&lt;/<span class="name">title</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">style</span> <span class="attr">media</span>=<span class="string">"screen"</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">   div&#123;</span></span><br><span class="line"><span class="undefined">     text-align: center;</span></span><br><span class="line"><span class="undefined">   &#125;</span></span><br><span class="line"><span class="undefined">   img &#123;</span></span><br><span class="line"><span class="undefined">  display: inline-block;</span></span><br><span class="line"><span class="undefined">  width: 256px; height: 192px;</span></span><br><span class="line"><span class="undefined">  /* 隐藏Firefox alt文字 */</span></span><br><span class="line"><span class="undefined">  color: transparent;</span></span><br><span class="line"><span class="undefined">  position: relative;</span></span><br><span class="line"><span class="undefined">  overflow: hidden;</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">img:not([src]) &#123;</span></span><br><span class="line"><span class="undefined">    /* 隐藏Chrome alt文字以及银色边框 */</span></span><br><span class="line"><span class="undefined">    visibility: hidden;</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">img::before &#123;</span></span><br><span class="line"><span class="undefined">    /* 淡蓝色占位背景 */</span></span><br><span class="line"><span class="undefined">    content: "";</span></span><br><span class="line"><span class="undefined">    position: absolute; left: 0;</span></span><br><span class="line"><span class="undefined">    width: 100%; height: 100%;</span></span><br><span class="line"><span class="undefined">    background-color: #f0f3f9;</span></span><br><span class="line"><span class="undefined">    visibility: visible;</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">img::after &#123;</span></span><br><span class="line"><span class="undefined">    /* 黑色alt信息条 */</span></span><br><span class="line"><span class="undefined">    content: attr(alt);</span></span><br><span class="line"><span class="undefined">    position: absolute;</span></span><br><span class="line"><span class="undefined">    left: 0; bottom: 0;</span></span><br><span class="line"><span class="undefined">    width: 100%;</span></span><br><span class="line"><span class="undefined">    line-height: 50px;</span></span><br><span class="line"><span class="undefined">    text-align: center;</span></span><br><span class="line"><span class="undefined">    background-color: rgba(0,0,0,.5);</span></span><br><span class="line"><span class="undefined">    color: white;</span></span><br><span class="line"><span class="undefined">    font-size: 14px;</span></span><br><span class="line"><span class="undefined">    transform: translateY(100%);</span></span><br><span class="line"><span class="undefined">    /* 来点过渡动画效果 */</span></span><br><span class="line"><span class="undefined">    transition: transform .5s;</span></span><br><span class="line"><span class="undefined">    visibility: visible;</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">img:hover::after &#123;</span></span><br><span class="line"><span class="undefined">    transform: translateY(0);</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">.gal:hover &#123;</span></span><br><span class="line"><span class="undefined">    content: url(1.png);</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined">   </span><span class="tag">&lt;/<span class="name">style</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">head</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">body</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">div</span>&gt;</span></span><br><span class="line">   <span class="tag">&lt;<span class="name">img</span> <span class="attr">alt</span>=<span class="string">"沉思图"</span> <span class="attr">data-src</span>=<span class="string">"1.jpg"</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">p</span>&gt;</span><span class="tag">&lt;<span class="name">button</span>&gt;</span>设置src属性显示图片<span class="tag">&lt;/<span class="name">button</span>&gt;</span><span class="tag">&lt;/<span class="name">p</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">img</span> <span class="attr">class</span>=<span class="string">"gal"</span> <span class="attr">src</span>=<span class="string">"1.jpg"</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">div</span>&gt;</span></span><br><span class="line">  <span class="tag">&lt;<span class="name">script</span> <span class="attr">type</span>=<span class="string">"text/javascript"</span>&gt;</span><span class="undefined"></span></span><br><span class="line"><span class="undefined">  var eleButton = document.querySelector('button'),</span></span><br><span class="line"><span class="undefined">  eleImg = document.querySelector('img');</span></span><br><span class="line"><span class="undefined"></span></span><br><span class="line"><span class="undefined">if (eleButton &amp;&amp; eleImg) &#123;</span></span><br><span class="line"><span class="undefined">  var initValueButton = eleButton.innerHTML;</span></span><br><span class="line"><span class="undefined">  // 图片地址 先把图片地址保存在srcImage中</span></span><br><span class="line"><span class="undefined">  var srcImage = eleImg.getAttribute('data-src');</span></span><br><span class="line"><span class="undefined">  // 移除该属性</span></span><br><span class="line"><span class="undefined">  eleImg.removeAttribute('data-src');</span></span><br><span class="line"><span class="undefined">  // 按钮点击事件</span></span><br><span class="line"><span class="undefined">  eleButton.addEventListener('click', function() &#123;</span></span><br><span class="line"><span class="undefined">      if (this.innerHTML == initValueButton) &#123;</span></span><br><span class="line"><span class="undefined">        //改变按钮</span></span><br><span class="line"><span class="undefined">          this.innerHTML = '移除src属性';</span></span><br><span class="line"><span class="undefined">          //添加src属性显示图片</span></span><br><span class="line"><span class="undefined">          eleImg.setAttribute('src', srcImage);</span></span><br><span class="line"><span class="undefined">      &#125; else &#123;</span></span><br><span class="line"><span class="undefined">        //改变按钮</span></span><br><span class="line"><span class="undefined">          this.innerHTML = initValueButton;</span></span><br><span class="line"><span class="undefined">          // src属性移除</span></span><br><span class="line"><span class="undefined">          eleImg.removeAttribute('src');</span></span><br><span class="line"><span class="undefined">      &#125;</span></span><br><span class="line"><span class="undefined">  &#125;);</span></span><br><span class="line"><span class="undefined">&#125;</span></span><br><span class="line"><span class="undefined">  </span><span class="tag">&lt;/<span class="name">script</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">body</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;/<span class="name">html</span>&gt;</span></span><br></pre></td></tr></table></figure></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： css 笔记&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=28949390&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;&lt;br&gt;此文作为个人阅读css世界的记录。&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>从一个诡异的数组开始</title>
    <link href="https://cir99.github.io/2018/03/05/%E4%BB%8E%E4%B8%80%E4%B8%AA%E8%AF%A1%E5%BC%82%E7%9A%84%E6%95%B0%E7%BB%84%E5%BC%80%E5%A7%8B/"/>
    <id>https://cir99.github.io/2018/03/05/从一个诡异的数组开始/</id>
    <published>2018-03-05T06:37:34.000Z</published>
    <updated>2018-03-06T02:20:51.660Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： 数学</p><hr><p>1, 2, 4, 8, 16，31……</p><p>当我打开一个b站视频<br><a href="https://www.bilibili.com/video/av17442695/" target="_blank" rel="noopener">https://www.bilibili.com/video/av17442695/</a><br>看到当用直线连接圆上各点时(n=1,2,3,4,5)所划分的区域数目构成数列是1, 2, 4, 8, 16，31……，你能求出通项公式吗？<br>单看前四项，肯定会以为是2的n次方，但是第5个为什么是奇数？<br><a id="more"></a><br><img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1fp0rr6ho7vj208407z74c.jpg" alt=""><br>很遗憾，我毫无头绪。可能脑子离开数学太久了吧。看到评论区贴上知乎的答案后，仔细阅读并思考后有感而发写下本文。<br>b站原作者的答案<br><a href="https://www.bilibili.com/video/av19849697/?from=search&amp;seid=1097064019385868872" target="_blank" rel="noopener">https://www.bilibili.com/video/av19849697/?from=search&amp;seid=1097064019385868872</a><br>视频制作是作者自制的python库，在GitHub上开源<br><a href="https://github.com/3b1b/manim" target="_blank" rel="noopener">https://github.com/3b1b/manim</a><br>b站有大神的教程：<br><a href="https://www.bilibili.com/read/cv17444" target="_blank" rel="noopener">https://www.bilibili.com/read/cv17444</a><br>下面我主要引述知乎大神的答案进行解释：<br>  知乎链接：<a href="https://www.zhihu.com/question/49249958/answer/116348707?utm_source=qq&amp;utm_medium=social" target="_blank" rel="noopener">https://www.zhihu.com/question/49249958/answer/116348707?utm_source=qq&amp;utm_medium=social</a><br>  作者：匡世珉<br>  他提供非常好的几何解释。<br>  首先研究一条线是怎么划分圆？<br>  <img src="http://wx3.sinaimg.cn/mw690/7e99332fgy1fp0s5notfkj209308rtah.jpg" alt=""></p><p>  线a从左往右画的时候，碰到别的线（如图中的绿线）就将绿线与圆划分的区域再划分两个子区域（+1），依次类推直线之间的交点都会把圆的区域多划分一份。当直线a继续画，到达右边的终点时，线a也会圆多划分一份。<br>  所以，总份数应该是 1+『圆内部的交点数量』+『直线段的数量』。<br>  1代表是圆本身为一份。<br>  直线段的数量，则从圆上n个点中任选2个点连接直线的直线数量:具体公式暂时不知道怎么在md写，可以查看知乎链接。<br>  那圆内部的交点数量怎么求呢？我们可以把圆内部的每个交点看成是某个<strong>圆内接四边形的对角线交点</strong>，于是在n个点中，任意四个点的组合都对应了圆内部的某个交点。<br><img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fp0syt7ya8j209908haa1.jpg" alt=""><br>所以求圆内部的交点数相当于是求『n个点中选4个点有几种选法』</p><p><img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1fp0t0nr02jj20f9020t8n.jpg" alt=""></p><p>  通项公式还可以有各种数学方法求出。<br>  但是，存在两个巧合:1.为什么，n较少时为什么是2的n次幂？<br>  2.当n等于10时，巧合区域为256？</p><p>  解答这个问题，就要提到杨辉三角；<br>  百度百科<br>  <a href="https://baike.baidu.com/item/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/215098?fr=aladdin" target="_blank" rel="noopener">https://baike.baidu.com/item/%E6%9D%A8%E8%BE%89%E4%B8%89%E8%A7%92/215098?fr=aladdin</a><br>  <img src="http://wx3.sinaimg.cn/mw690/7e99332fgy1fp0t60tycyj20dd095dfs.jpg" alt=""></p><p>  杨辉三角形的构造方法：<br>  每一个数被复制了两份，分别加进了左下角与右下角的两个数中。</p><p>下一行的和是上一行的两倍，而由于第一行的和是1，所以每一行的和就都是2的幂啦！<br>  另一种表现形式：<br><img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fp0tb9mf76j20do09jjri.jpg" alt=""></p><p>  这里，我也是第一次见，直接引用知乎作者的介绍：<br><img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1fp0tdgeiifj20h70bimyb.jpg" alt=""></p><p>  所以，当n=6时，即可转化为图中绿色的组合数求和，重新写回数字形式<br>  <img src="http://wx3.sinaimg.cn/mw690/7e99332fgy1fp0tihawnsj20da092aa0.jpg" alt=""><br>  <img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fp0tjh2zraj20dl09bt8t.jpg" alt=""><br>  把两个15再转化为10和5<br> <img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fp0tmpc355j20d7096mx3.jpg" alt=""><br>  现在一眼就明白为什么当n=6，它是31，因为它缺少右边的1。<br>同理，当n=10，刚好是上一列的一半，所以就是256。<br><img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fp0tooxfaqj20e709hmxg.jpg" alt=""></p><p>第一次看到杨辉三角时，还是在廖雪峰老师的python（不好意思，中途弃学了）<a href="https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000" target="_blank" rel="noopener">https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317799226173f45ce40636141b6abc8424e12b5fb27000</a></p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">triangles</span><span class="params">(n)</span>:</span></span><br><span class="line">    <span class="comment"># 创建初始值为1的数组</span></span><br><span class="line">    L = [<span class="number">1</span>]</span><br><span class="line">    <span class="keyword">while</span> <span class="keyword">True</span>:</span><br><span class="line">        <span class="comment"># yield是生成器函数专属关键词，函数进行到这里中断，再执行时从中断处再进行</span></span><br><span class="line">        <span class="keyword">yield</span> L</span><br><span class="line">        <span class="comment"># 重新声明这个数组，用循环计算下一列中间部分的数值（每列首尾都为1），长度正好是上一列的长度-1</span></span><br><span class="line">        L = [L[x]+L[x+<span class="number">1</span>] <span class="keyword">for</span> x <span class="keyword">in</span> range(len(L)<span class="number">-1</span>)]</span><br><span class="line">        <span class="comment"># insert(0,1)在数组的开头插入1，insert(index,object),JS对应的方法是splice(0,0,1)</span></span><br><span class="line">        <span class="comment"># splice(par1,pa2,par3) par1是起始位置，par2是删除项数(0就可以替换)，par3是object</span></span><br><span class="line">        L.insert(<span class="number">0</span>,<span class="number">1</span>)</span><br><span class="line">        <span class="comment"># append和JS的append用法相同</span></span><br><span class="line">        L.append(<span class="number">1</span>)</span><br><span class="line">        <span class="comment"># 判断推出条件</span></span><br><span class="line">        <span class="keyword">if</span> len(L)&gt;n:</span><br><span class="line">            <span class="keyword">break</span></span><br><span class="line"><span class="keyword">for</span> l <span class="keyword">in</span> triangles(<span class="number">8</span>):</span><br><span class="line">    print(l)</span><br></pre></td></tr></table></figure><p>附一个fib函数<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">fib</span><span class="params">(max)</span>:</span></span><br><span class="line">    n, a, b = <span class="number">0</span>, <span class="number">0</span>, <span class="number">1</span></span><br><span class="line">    <span class="keyword">while</span> n &lt; max:</span><br><span class="line">        <span class="keyword">yield</span> b</span><br><span class="line">        a, b = b, a + b</span><br><span class="line">        n = n + <span class="number">1</span></span><br><span class="line">    <span class="keyword">return</span> <span class="string">'done'</span></span><br></pre></td></tr></table></figure></p><p>注：<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">t = (b, a + b) <span class="comment"># t是一个tuple</span></span><br><span class="line">a = t[<span class="number">0</span>]</span><br><span class="line">b = t[<span class="number">1</span>]</span><br></pre></td></tr></table></figure></p><p>再附廖老师的关于yield文章<br><a href="https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/" target="_blank" rel="noopener">https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/</a></p><p>这篇文章写的比较杂乱，也有很多不足，请多包涵。</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： 数学&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;1, 2, 4, 8, 16，31……&lt;/p&gt;
&lt;p&gt;当我打开一个b站视频&lt;br&gt;&lt;a href=&quot;https://www.bilibili.com/video/av17442695/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.bilibili.com/video/av17442695/&lt;/a&gt;&lt;br&gt;看到当用直线连接圆上各点时(n=1,2,3,4,5)所划分的区域数目构成数列是1, 2, 4, 8, 16，31……，你能求出通项公式吗？&lt;br&gt;单看前四项，肯定会以为是2的n次方，但是第5个为什么是奇数？&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>算法图解第10章笔记</title>
    <link href="https://cir99.github.io/2018/02/25/%E7%AE%97%E6%B3%95%E5%9B%BE%E8%A7%A3%E7%AC%AC10%E7%AB%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://cir99.github.io/2018/02/25/算法图解第10章笔记/</id>
    <published>2018-02-25T02:54:38.000Z</published>
    <updated>2018-02-25T05:45:56.706Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： 笔记 python 简单算法</p><hr><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=26125533&auto=0&height=66"></iframe><h2 id="K最邻算法-KNN算法）"><a href="#K最邻算法-KNN算法）" class="headerlink" title="K最邻算法(KNN算法）"></a>K最邻算法(KNN算法）</h2><a id="more"></a><ul><li>前言</li></ul><p>我第一次见到此算法(k-nearest neighbour)，是在《机器学习实战》中，也是用python实现的。那时看的比较匆忙，应该不怎么理解，这次再深入理解吧！算法图解这本书已经接近尾声了，过一阵子我会好好写《机器学习实战》的笔记。（难度很大，会参考其他大神的笔记，更新会慢很多）。<br>KNN算法只要应用在分类。</p><ul><li>原理简述和举例<br>首先，明确分类的依据是事物的特征。而特征可分为能用数字表示和不能用数字表示两类。例如，年龄，长度和体重可以用数字表示，但像形状，气味等感官特征就难以用数字表示，这时我们可以人为规定数字给相应的特征。<br>然后将这些表示在坐标系中表示出来（人类的思维）。如下图，就是两个特征坐标系。<br>举例说明：<br>你有三个水果，想判断它们分别是柚子还是橙子。这时，你会想到从两个特征来分类，一是个头大小，二是红的程度。（书本假定，柚子比橙子更红更大），然后用欧式距离公式计算该点与其他点的距离。这个例子中，K选择为1，即选择最近点来衡量该点是柚子还是橙子。<br><img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1foshwvmf6zj20a708ut9a.jpg" alt=""></li></ul><p> 注意：这里有两个特征所以为平面坐标系，当超过三个特征就难以用图形（人类难以理解）表示出来，不过距离公式还是相同。</p><h2 id="补充"><a href="#补充" class="headerlink" title="补充"></a>补充</h2><p> 算法图解只是简单介绍KNN算法，关于此算法的优缺点，K的选择等会在我写《机器学习实战》笔记更详细介绍。总的来说，这算法还是挺有趣的，而且很实用。<br> <img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fosmqkl9skj20qv07ngpn.jpg" alt=""></p><p> 第10章的练习都值得思考（参考答案）。</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： 笔记 python 简单算法&lt;/p&gt;
&lt;hr&gt;
&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=26125533&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;K最邻算法-KNN算法）&quot;&gt;&lt;a href=&quot;#K最邻算法-KNN算法）&quot; class=&quot;headerlink&quot; title=&quot;K最邻算法(KNN算法）&quot;&gt;&lt;/a&gt;K最邻算法(KNN算法）&lt;/h2&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>算法图解第9章笔记</title>
    <link href="https://cir99.github.io/2018/02/25/%E7%AE%97%E6%B3%95%E5%9B%BE%E8%A7%A3%E7%AC%AC9%E7%AB%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://cir99.github.io/2018/02/25/算法图解第9章笔记/</id>
    <published>2018-02-25T01:25:19.000Z</published>
    <updated>2018-02-25T01:52:30.796Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=139707&auto=0&height=66"></iframe><p>标签（空格分隔）： 简单算法 笔记 python</p><hr><h2 id="动态规划"><a href="#动态规划" class="headerlink" title="动态规划"></a>动态规划</h2><p>动态规划原理是先解决子问题，再逐步解决大问题。<br>简单例子（背包问题）：你是小偷，现有一个容量为4磅的背包。商店有三种商品为：$3000的音响重为4磅；$2000的笔记本电脑重为3磅，$1500的吉他重为1磅。你怎样偷窃才能获利最多？</p><a id="more"></a><p>最简单的办法：遍历所有可能组合，找到最值钱的组合。可惜存在一个巨大的缺点，算法运行时间为O(2^n),慢如蜗牛。<br>合理的方法（动态归划）：原理是先解决小背包（子背包）问题，再逐步解决原来的问题。通过迭代当前容量最大价值解决问题，如下图：</p><p><img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1fosdv3rnqyj20dv094ac2.jpg" alt=""></p><p>  局限：但仅当每个子问题都是离散的，即不依赖于其他子问题时，动态规划才管用。举例，有限时间在英国各地游览和中途去法国各景点游览。</p><p> 启示：</p><ul><li>动态规划可帮助你在给定约束条件下找到最优解。在背包问题中，你必 须在背包容量给定的情况下，偷到价值最高的商品。</li><li><p>在问题可分解为彼此独立且离散的子问题时，就可使用动态规划来解决。</p></li><li><p>每种动态规划解决方案都涉及网格。</p></li><li><p>单元格中的值通常就是你要优化的值。在前面的背包问题中，单元格的值为商品的价值。</p></li><li><p>每个单元格都是一个子问题，因此你应考虑如何将问题分成子问题，这有助于你找出网格的坐标轴。</p></li></ul><h2 id="最长公共子串"><a href="#最长公共子串" class="headerlink" title="最长公共子串"></a>最长公共子串</h2><p>当你不小心hish，输入法怎样会提供相近的单词fish作为参考，而不是vista？这是就要计算最长公共子串(是网格中最大的数字)，如下图：<br><img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1fosetnqxzwj20gr0c9q5e.jpg" width="350" height="200"><br><img src="http://wx3.sinaimg.cn/mw690/7e99332fgy1fosetv348fj20az09wjsz.jpg" width="350" height="200"><br>由此，输入法判断的是fish作为参考。<br><strong>具体代码实现，以后再补充。</strong></p><h2 id="最长公共子序列"><a href="#最长公共子序列" class="headerlink" title="最长公共子序列"></a>最长公共子序列</h2><p>假设你不小心输入了fosh，原本想输入的是fish还是fort呢?<br>可以看出，两个单词和fosh的最长公共子串都为2，这是就要判断最长公共子序列，计算公式如下图：<br><img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fosfbrszfmj20hz0apmzj.jpg" width="450" height="300"><br><img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1fosfc9lixnj20hj07l0uv.jpg" width="450" height="300"><br>所以输入法判断想输入的是fish。<br><strong>具体代码，以后补充。</strong></p><h2 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h2><p><img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1fosfhdetdsj20ng08itbi.jpg" alt=""></p>]]></content>
    
    <summary type="html">
    
      &lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=139707&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;标签（空格分隔）： 简单算法 笔记 python&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;动态规划&quot;&gt;&lt;a href=&quot;#动态规划&quot; class=&quot;headerlink&quot; title=&quot;动态规划&quot;&gt;&lt;/a&gt;动态规划&lt;/h2&gt;&lt;p&gt;动态规划原理是先解决子问题，再逐步解决大问题。&lt;br&gt;简单例子（背包问题）：你是小偷，现有一个容量为4磅的背包。商店有三种商品为：$3000的音响重为4磅；$2000的笔记本电脑重为3磅，$1500的吉他重为1磅。你怎样偷窃才能获利最多？&lt;/p&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>算法图解第8章笔记</title>
    <link href="https://cir99.github.io/2018/02/25/%E7%AE%97%E6%B3%95%E5%9B%BE%E8%A7%A3%E7%AC%AC8%E7%AB%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://cir99.github.io/2018/02/25/算法图解第8章笔记/</id>
    <published>2018-02-24T16:42:28.000Z</published>
    <updated>2018-02-24T16:48:23.724Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： 简单算法 笔记 python</p><hr><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=477841196&auto=0&height=66"></iframe><h2 id="贪婪算法思想："><a href="#贪婪算法思想：" class="headerlink" title="贪婪算法思想："></a>贪婪算法思想：</h2><p>每步都选择局部最优解，最终得到的就是全局最优解。<br><a id="more"></a></p><h2 id="集合覆盖问题"><a href="#集合覆盖问题" class="headerlink" title="集合覆盖问题"></a>集合覆盖问题</h2><p>假如你办了个广播节目。要让全美50个州的听众都收听到，为了支付较低的费用，你决定在尽可能少的广播台播出。<br>每个广播台都覆盖特定的区域，不同广播台的覆盖区域可能重叠。</p><p> <img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1forpkc9kdbj20ab0c2jt7.jpg" width="200" height="100"><br> 求完美解的时间复杂度O(2^n),会导致运行时间太长，不符合实际应用。<br> 我们可以采用近似算法，贪婪算法解决。</p><p> 衡量一种近似算法的好坏只要有两种标准：</p><ol><li>运行速度；</li><li>得到的近似解与最优解的接近程度。</li></ol><h2 id="运用贪婪算法解决集合覆盖问题"><a href="#运用贪婪算法解决集合覆盖问题" class="headerlink" title="运用贪婪算法解决集合覆盖问题"></a>运用贪婪算法解决集合覆盖问题</h2><p>假设有如下的州：<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#传入一个州数组并转换为集合set，表示还需要覆盖州</span></span><br><span class="line">states_needed = set([<span class="string">"mt"</span>, <span class="string">"wa"</span>, <span class="string">"or"</span>, <span class="string">"id"</span>, <span class="string">"nv"</span>, <span class="string">"ut"</span>, <span class="string">"ca"</span>, <span class="string">"az"</span>])  </span><br><span class="line"><span class="comment">#用散列表表示可选电台</span></span><br><span class="line">stations = &#123;&#125;</span><br><span class="line">stations[<span class="string">"kone"</span>] = set([<span class="string">"id"</span>, <span class="string">"nv"</span>, <span class="string">"ut"</span>])</span><br><span class="line">stations[<span class="string">"ktwo"</span>] = set([<span class="string">"wa"</span>, <span class="string">"id"</span>, <span class="string">"mt"</span>])</span><br><span class="line">stations[<span class="string">"kthree"</span>] = set([<span class="string">"or"</span>, <span class="string">"nv"</span>, <span class="string">"ca"</span>])</span><br><span class="line">stations[<span class="string">"kfour"</span>] = set([<span class="string">"nv"</span>, <span class="string">"ut"</span>])</span><br><span class="line">stations[<span class="string">"kfive"</span>] = set([<span class="string">"ca"</span>, <span class="string">"az"</span>])</span><br><span class="line"><span class="comment">#存储最终选择的电台</span></span><br><span class="line">final_stations = set()</span><br><span class="line"><span class="comment">#选择最佳的未选择电台</span></span><br><span class="line"><span class="comment">#循环直至覆盖完</span></span><br><span class="line"><span class="keyword">while</span> states_needed:</span><br><span class="line">  best_station = <span class="keyword">None</span></span><br><span class="line"><span class="comment">#包含该电台覆盖的所有未覆盖的州</span></span><br><span class="line">  states_covered = set()</span><br><span class="line">  <span class="comment">#第一个参数返回散列表的键，第二个参数返回散列表的值</span></span><br><span class="line">  <span class="keyword">for</span> station, states_for_station <span class="keyword">in</span> stations.items():</span><br><span class="line">  <span class="comment">#计算交集</span></span><br><span class="line">  <span class="comment">#它包含当前电台覆盖的 一系列还未覆盖的州</span></span><br><span class="line">    covered = states_needed &amp; states_for_station</span><br><span class="line">  <span class="comment">#判断最佳电台</span></span><br><span class="line">    <span class="keyword">if</span> len(covered) &gt; len(states_covered):   </span><br><span class="line">      best_station = station   </span><br><span class="line">      states_covered = covered</span><br><span class="line"></span><br><span class="line">  states_needed -= states_covered   </span><br><span class="line">  final_stations.add(best_station)  </span><br><span class="line"></span><br><span class="line"> <span class="keyword">print</span> final_stations</span><br></pre></td></tr></table></figure></p><p>set:<br>集合的特点是去重，在前面的博文有提过用JS的Set对象，进行去重。我猜测JS应该借鉴了python吧。<br>集合运算：|（并集）,&amp;（交集）, -（差集）<br> item():<br> Python 字典 items() 方法以列表返回可遍历的(键, 值) 元组数组。</p><h2 id="NP完全问题"><a href="#NP完全问题" class="headerlink" title="NP完全问题"></a>NP完全问题</h2><p> 旅行商问题：游览n个城市（不重复），可能的路径有多少条？<br> 答案是：n!。当要求精确求出最短路径时，就需遍历n!条路径（当n=10时，n!= 3 628 800）。可以看出，当n越大，路径就急速增加，所以求出精确解也是不符实际。所以，只能近似求解。<br> 上述的旅行商问题和集合覆盖问题同属于NP完全问题，对于此类问题较为合适的方法是近似求解，而不是求完美解。<br> 这样就诞生一个新的问题：什么问题才是NP完全问题？<br> NP完全问题特征：</p><ul><li>元素较少时算法的运行速度非常快，但随着元素数量的增加，速度会变得非常慢。</li><li>涉及“所有组合”的问题通常是NP完全问题。</li><li>不能将问题分成小问题，必须考虑各种可能的情况。这可能是NP完全问题。</li><li>如果问题涉及序列（如旅行商问题中的城市序列）且难以解决，它可能就是NP完全问题。</li><li>如果问题涉及集合（如广播台集合）且难以解决，它可能就是NP完全问题。</li><li>如果问题可转换为集合覆盖问题或旅行商问题，那它肯定是NP完全问题。</li></ul><p>idea:</p><ul><li>贪婪算法与内存管理</li><li>没点数学思维，快递我都送不好，快递小哥辛苦了！</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： 简单算法 笔记 python&lt;/p&gt;
&lt;hr&gt;
&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=477841196&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;贪婪算法思想：&quot;&gt;&lt;a href=&quot;#贪婪算法思想：&quot; class=&quot;headerlink&quot; title=&quot;贪婪算法思想：&quot;&gt;&lt;/a&gt;贪婪算法思想：&lt;/h2&gt;&lt;p&gt;每步都选择局部最优解，最终得到的就是全局最优解。&lt;br&gt;
    
    </summary>
    
    
      <category term="简单算法 笔记 python" scheme="https://cir99.github.io/tags/%E7%AE%80%E5%8D%95%E7%AE%97%E6%B3%95-%E7%AC%94%E8%AE%B0-python/"/>
    
  </entry>
  
  <entry>
    <title>算法图解第7章笔记</title>
    <link href="https://cir99.github.io/2018/02/24/%E7%AE%97%E6%B3%95%E5%9B%BE%E8%A7%A3%E7%AC%AC7%E7%AB%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://cir99.github.io/2018/02/24/算法图解第7章笔记/</id>
    <published>2018-02-24T08:42:50.000Z</published>
    <updated>2018-02-24T16:48:42.877Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： 笔记  简单算法 python</p><hr><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=18861490&auto=0&height=66"></iframe><h2 id="狄克斯特拉算法"><a href="#狄克斯特拉算法" class="headerlink" title="狄克斯特拉算法"></a>狄克斯特拉算法</h2><a id="more"></a><p><img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1forfh01tuaj20qo05m75w.jpg" alt=""></p><p>  要计算非加权图中的最短路径，可使用广度优先搜索。要计算 加权图中的最短路径，可使用狄克斯特拉算法。<br>  <img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1forfkfc3hyj20i003nglz.jpg" alt=""></p><p>  实例分析：<br>  <img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1forfvybf47j20i609wq5l.jpg" alt=""></p><p>  在这张图上，你怎样用最少的钱将乐谱交换到钢琴？这时就要使用狄克斯特拉算法。</p><ol><li>找出最便宜的节点，即可在最短时间内前往的节点。</li><li>对于该节点的邻居，检查是否有前往它们的更短路径，如果有，就更新其开销。</li><li>重复这个过程，直到对图中的每个节点都这样做了。</li><li>计算最终路径。</li></ol><p>算法执行后更新的开销如下表：<br><img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1forg3ded18j20j3066gnw.jpg" alt=""></p><p>  从此，可以看出最低花销是35，如何将交换路线确定？只需从钢琴出发，不断求父节点直到乐谱为止就可以确定了。<br>  补充：此算法不适用于负加权的图，若有负加权，应采用贝尔曼-福得算法（Bellman-Ford algorithm）。<em>以后我会补充说明</em></p><h2 id="代码实现狄克斯特拉算法"><a href="#代码实现狄克斯特拉算法" class="headerlink" title="代码实现狄克斯特拉算法"></a>代码实现狄克斯特拉算法</h2><p><img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1fork8muaauj209d04x0t3.jpg" alt=""></p><p>  以上图为例，进行实现。<br>  准备：<br>  要构建两个散列表（costs&amp;parents)和一个图（graph)。</p><ul><li><p>costs散列表<br>用来存储每个节点的开销，算法代码运行后会更新起点到该节点的<strong>最低</strong>花销。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">#假设到达终点的花销为无穷大</span></span><br><span class="line">infinity=float(<span class="string">"inf"</span>)</span><br><span class="line"><span class="comment">#使用python的字典</span></span><br><span class="line">costs=&#123;&#125;</span><br><span class="line">costs[<span class="string">"a"</span>]=<span class="number">6</span></span><br><span class="line">costs[<span class="string">"b"</span>]=<span class="number">2</span></span><br><span class="line">cost[<span class="string">"fin"</span>]=infinity</span><br></pre></td></tr></table></figure></li><li><p>parents散列表<br>存储各节点的父节点的散列表，算法代码运行后会更新起点到终点花销<strong>最低</strong>的路线（从终点不停找父节点直至起点）。</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">parents=&#123;&#125;</span><br><span class="line">parents[<span class="string">"a"</span>]=<span class="string">"start"</span></span><br><span class="line">parents[<span class="string">"b"</span>]=<span class="string">"start"</span></span><br><span class="line"><span class="comment">#将终点节点的父节点设为空</span></span><br><span class="line">parents[<span class="string">"fin"</span>]=<span class="keyword">None</span></span><br></pre></td></tr></table></figure></li><li><p>graph图</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">graph=&#123;&#125;</span><br><span class="line">graph[<span class="string">"start"</span>]=&#123;&#125;</span><br><span class="line">graph[<span class="string">"start"</span>][<span class="string">"a"</span>]=<span class="number">6</span></span><br><span class="line">graph[<span class="string">"start"</span>][<span class="string">"b"</span>]=<span class="number">2</span></span><br><span class="line">graph[<span class="string">"a"</span>] = &#123;&#125;</span><br><span class="line">graph[<span class="string">"a"</span>][<span class="string">"fin"</span>] = <span class="number">1</span></span><br><span class="line">graph[<span class="string">"b"</span>] = &#123;&#125;</span><br><span class="line">graph[<span class="string">"b"</span>][<span class="string">"a"</span>] = <span class="number">3</span></span><br><span class="line">graph[<span class="string">"b"</span>][<span class="string">"fin"</span>] = <span class="number">5</span></span><br><span class="line">graph[<span class="string">"fin"</span>] = &#123;&#125;</span><br></pre></td></tr></table></figure><p>实现：<br><img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1forlrazofyj20uq0b5n29.jpg" alt=""></p></li></ul><p><img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1forlwq95zzj20qu06ljt2.jpg" alt=""></p><p>  详细部分和思路请浏览第7章后半部分。</p><p>  小结：</p><ul><li>广度优先搜索用于在非加权图中查找最短路径。</li><li>狄克斯特拉算法用于在加权图中查找最短路径</li><li>仅当权重为正时狄克斯特拉算法才管用。</li><li>如果图中包含负权边，请使用贝尔曼-福德算法。</li></ul>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： 笔记  简单算法 python&lt;/p&gt;
&lt;hr&gt;
&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=18861490&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;

&lt;h2 id=&quot;狄克斯特拉算法&quot;&gt;&lt;a href=&quot;#狄克斯特拉算法&quot; class=&quot;headerlink&quot; title=&quot;狄克斯特拉算法&quot;&gt;&lt;/a&gt;狄克斯特拉算法&lt;/h2&gt;
    
    </summary>
    
    
      <category term="简单算法 笔记 python" scheme="https://cir99.github.io/tags/%E7%AE%80%E5%8D%95%E7%AE%97%E6%B3%95-%E7%AC%94%E8%AE%B0-python/"/>
    
  </entry>
  
  <entry>
    <title>算法图解第6章笔记</title>
    <link href="https://cir99.github.io/2018/02/24/%E7%AE%97%E6%B3%95%E5%9B%BE%E8%A7%A3%E7%AC%AC6%E7%AB%A0%E7%AC%94%E8%AE%B0/"/>
    <id>https://cir99.github.io/2018/02/24/算法图解第6章笔记/</id>
    <published>2018-02-24T04:14:17.000Z</published>
    <updated>2018-02-24T16:49:26.781Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： 笔记 基础算法 python</p><hr><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=19563214&auto=0&height=66"></iframe><a id="more"></a><h2 id="数据结构"><a href="#数据结构" class="headerlink" title="数据结构"></a>数据结构</h2><p>队列是一种先进先出（First In First Out，FIFO）的数据结构，而栈是一种后进先出（Last In First Out，LIFO）的数据结构。<br><img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1forcx26fr3j20gn0asq4u.jpg" alt=""><br>简单图的python表示<br><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">graph = &#123;&#125;</span><br><span class="line">graph[<span class="string">"you"</span>] = [<span class="string">"alice"</span>, <span class="string">"bob"</span>, <span class="string">"claire"</span>]</span><br><span class="line">graph[<span class="string">"bob"</span>] = [<span class="string">"anuj"</span>, <span class="string">"peggy"</span>]</span><br><span class="line">graph[<span class="string">"alice"</span>] = [<span class="string">"peggy"</span>]</span><br><span class="line">graph[<span class="string">"claire"</span>] = [<span class="string">"thom"</span>, <span class="string">"jonny"</span>]</span><br><span class="line">graph[<span class="string">"anuj"</span>] = []</span><br><span class="line">graph[<span class="string">"peggy"</span>] = []</span><br><span class="line">graph[<span class="string">"thom"</span>] = []</span><br><span class="line">graph[<span class="string">"jonny"</span>] = []</span><br></pre></td></tr></table></figure></p><p>补充：散列表是无序的，因此添加键—值对的顺序无关紧要。</p><p>  图分为有向图和无向图（等价）。</p><h2 id="广度优先搜索算法示例"><a href="#广度优先搜索算法示例" class="headerlink" title="广度优先搜索算法示例"></a>广度优先搜索算法示例</h2><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">from</span> collections <span class="keyword">import</span> deque</span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">search</span><span class="params">(name)</span>:</span></span><br><span class="line"><span class="comment">#创建一个双端队列</span></span><br><span class="line">  search_queue = deque()</span><br><span class="line"><span class="comment">#将你的邻居都加入到这个搜索队列中</span></span><br><span class="line">  search_queue += graph[<span class="string">"you"</span>]</span><br><span class="line">  searched = []</span><br><span class="line">  <span class="keyword">while</span> search_queue:</span><br><span class="line">    person = search_queue.popleft()</span><br><span class="line">  <span class="comment">#当此人不被标记是才判断</span></span><br><span class="line">    <span class="keyword">if</span> <span class="keyword">not</span> person <span class="keyword">in</span> searched:</span><br><span class="line">      <span class="keyword">if</span> person_is_seller(person):</span><br><span class="line">        <span class="keyword">print</span> person + <span class="string">" is a mango seller!"</span></span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">True</span></span><br><span class="line">      <span class="keyword">else</span>:</span><br><span class="line">        search_queue += graph[person] s</span><br><span class="line">        earched.append(person)</span><br><span class="line">  <span class="keyword">return</span> false</span><br><span class="line"></span><br><span class="line"><span class="comment">#简单的判断函数</span></span><br><span class="line"><span class="function"><span class="keyword">def</span> <span class="title">person_is_seller</span><span class="params">(name)</span>:</span>     </span><br><span class="line">  <span class="keyword">return</span> name[<span class="number">-1</span>] == <span class="string">'m'</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line">search(<span class="string">"you"</span>)</span><br></pre></td></tr></table></figure><p>广度优先搜索的运行时间为 O(人数 + 边数)，这通常写作O(V + E)，其中V为顶点（vertice）数，E为边数。</p><p><img src="http://wx4.sinaimg.cn/mw690/7e99332fgy1foretgp92aj20em09vq4q.jpg" alt="此处输入图片的描述"></p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： 笔记 基础算法 python&lt;/p&gt;
&lt;hr&gt;
&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=19563214&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;
    
    </summary>
    
    
      <category term="简单算法 笔记 python" scheme="https://cir99.github.io/tags/%E7%AE%80%E5%8D%95%E7%AE%97%E6%B3%95-%E7%AC%94%E8%AE%B0-python/"/>
    
  </entry>
  
  <entry>
    <title>个人总结的几种数组去重方法</title>
    <link href="https://cir99.github.io/2018/02/24/array/"/>
    <id>https://cir99.github.io/2018/02/24/array/</id>
    <published>2018-02-24T02:00:41.000Z</published>
    <updated>2018-02-24T02:30:01.379Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： 数组 JavaScript</p><hr><h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>&emsp;&emsp;博客第一篇技术文章（非常基础,因为我太菜了）总结了几种不同方法的数组去重方法。文章不是很全面，还有例如利用对象唯一性去重等方法，可是我觉得太麻烦和有些缺点就没有收集了。</p><p><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=461074907&auto=0&height=66"></iframe><br><a id="more"></a></p><h2 id="双循环"><a href="#双循环" class="headerlink" title="双循环"></a>双循环</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">unique</span>(<span class="params">arr</span>) </span>&#123;</span><br><span class="line">      <span class="keyword">var</span> result = [];</span><br><span class="line">      <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; arr.length; i++) &#123;</span><br><span class="line">        <span class="comment">//对于原数组的每个元素遍历</span></span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">var</span> j = i + <span class="number">1</span>; j &lt; arr.length; j++) &#123;</span><br><span class="line">          <span class="comment">//对选定元素跟后面的各个元素遍历比较</span></span><br><span class="line">          <span class="keyword">if</span> (arr[i] === arr[j]) &#123;</span><br><span class="line">            <span class="comment">// 遇到重复元素就跳过</span></span><br><span class="line">            j = ++i;</span><br><span class="line">          &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="comment">//将不重复的元素添加到result数组</span></span><br><span class="line">        result.push(arr[i]);</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">return</span> result;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>说明：这就是基本的双循环去重。注释已经较好的说明原理，注意的就是j=++i;相当于j = j+1; i = i+1;。</p><h2 id="sort"><a href="#sort" class="headerlink" title="sort()"></a>sort()</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">unique</span>(<span class="params">arr</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">var</span> result = [];</span><br><span class="line">    <span class="comment">//先将原数组排序，再比较</span></span><br><span class="line">    arr.sort();</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; arr.length; i++) &#123;</span><br><span class="line">      <span class="keyword">if</span> (arr[i] != arr[i + <span class="number">1</span>]) &#123;</span><br><span class="line">      <span class="comment">//元素跟后一个元素比较，不同则添加</span></span><br><span class="line">        result.push(arr[i]);</span><br><span class="line">      &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> result;</span><br><span class="line">  &#125;</span><br></pre></td></tr></table></figure><p>说明：由于排序的缘故，元素只需跟后一个元素比较就可以了，该方法效率偏低，但思路很清晰。</p><h2 id="indexOf"><a href="#indexOf" class="headerlink" title="indexOf()"></a>indexOf()</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">unique</span>(<span class="params">arr</span>) </span>&#123;</span><br><span class="line">      <span class="keyword">var</span> result = [];</span><br><span class="line">      <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">1</span>; i &lt; arr.length; i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (result.indexOf(arr[i]) === <span class="number">-1</span>) &#123;</span><br><span class="line">        <span class="comment">//在result中没找到的元素，就进行添加</span></span><br><span class="line">          result.push(arr[i]);</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">return</span> result;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>说明：indexOf()是es5的语法，对它不熟悉的话可以点击下面的链接浏览一下。去重的原理是indexOf()会对没找到的元素，返回-1，此时添加此元素即可去重。</p><p><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf" target="_blank" rel="noopener">https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf</a></p><h2 id="includes"><a href="#includes" class="headerlink" title="includes()"></a>includes()</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">unique</span>(<span class="params">arr</span>) </span>&#123;</span><br><span class="line">      <span class="keyword">var</span> result = [];</span><br><span class="line">      arr.forEach(<span class="function"><span class="keyword">function</span>(<span class="params">item</span>) </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (!newArr.includes(item)) &#123;</span><br><span class="line">          result.push(item);</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;);</span><br><span class="line">      <span class="keyword">return</span> result;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>说明：原理跟上面的indexOf()一样，值得注意的是forEach()是es5语法，ie6-8是不能用的，mdn上有兼容的方法。forEach()的作用是遍历数组元素，对它们执行相同的方法。includes()方法用来判断一个数组是否包含一个指定的值，根据情况，如果包含则返回true，否则返回false。下面链接介绍它们的用法。<br><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach" target="_blank" rel="noopener">https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach</a><br><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes" target="_blank" rel="noopener">https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/includes</a></p><h2 id="Map（es6"><a href="#Map（es6" class="headerlink" title="Map（es6)"></a>Map（es6)</h2><p>对于es6不熟悉的人（我）可以看看阮一峰大神的著作，里面就有详细的Map和Set的说明<br><a href="http://es6.ruanyifeng.com/#docs/set-map" target="_blank" rel="noopener">http://es6.ruanyifeng.com/#docs/set-map</a></p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">unique</span>(<span class="params">arr</span>) </span>&#123;</span><br><span class="line">      <span class="keyword">const</span> res = <span class="keyword">new</span> <span class="built_in">Map</span>();</span><br><span class="line">      <span class="keyword">return</span> arr.filter(<span class="function">(<span class="params">a</span>) =&gt;</span> !res.has(a) &amp;&amp; res.set(a, <span class="number">1</span>))</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="keyword">function</span> <span class="title">unique0</span>(<span class="params">arr</span>) </span>&#123;</span><br><span class="line">      <span class="keyword">var</span> result = [];</span><br><span class="line">      <span class="keyword">var</span> len = arr.length;</span><br><span class="line">      <span class="keyword">var</span> tmp = <span class="keyword">new</span> <span class="built_in">Map</span>();</span><br><span class="line">      <span class="keyword">for</span> (<span class="keyword">var</span> i = <span class="number">0</span>; i &lt; len; i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (!tmp.get(arr[i])) &#123;</span><br><span class="line">          tmp.set(arr[i], <span class="number">1</span>);</span><br><span class="line">          result.push(arr[i]);</span><br><span class="line">        &#125;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">return</span> newArr;</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><p>说明：关于这部分我还不是很熟悉，待我研究后再来补充吧。<br><a href="https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map" target="_blank" rel="noopener">https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map</a></p><h2 id="Set（es6"><a href="#Set（es6" class="headerlink" title="Set（es6)"></a>Set（es6)</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="function"><span class="keyword">function</span> <span class="title">unique</span>(<span class="params">arr</span>) </span>&#123;</span><br><span class="line"><span class="comment">//使用Array.from()将Set对象转化为数组</span></span><br><span class="line">      <span class="keyword">return</span> <span class="built_in">Array</span>.from(<span class="keyword">new</span> <span class="built_in">Set</span>(arr));</span><br><span class="line">    &#125;</span><br></pre></td></tr></table></figure><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">// 拓展运算符(…)内部使用for...of循环,for...of支持数组，和类数组对象</span></span><br><span class="line"><span class="keyword">let</span> result=[...new <span class="built_in">Set</span>(arr)];</span><br></pre></td></tr></table></figure><p>说明：你没看错，去重就这么简单，具体的原理我再来补充吧！</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： 数组 JavaScript&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;前言&quot;&gt;&lt;a href=&quot;#前言&quot; class=&quot;headerlink&quot; title=&quot;前言&quot;&gt;&lt;/a&gt;前言&lt;/h2&gt;&lt;p&gt;&amp;emsp;&amp;emsp;博客第一篇技术文章（非常基础,因为我太菜了）总结了几种不同方法的数组去重方法。文章不是很全面，还有例如利用对象唯一性去重等方法，可是我觉得太麻烦和有些缺点就没有收集了。&lt;/p&gt;
&lt;p&gt;&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=461074907&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>神海4系列通关感想</title>
    <link href="https://cir99.github.io/2018/02/23/title/"/>
    <id>https://cir99.github.io/2018/02/23/title/</id>
    <published>2018-02-23T15:48:03.000Z</published>
    <updated>2018-02-24T02:29:50.284Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><p>标签： PS4   神秘海域 失落的遗产</p><hr><h2 id="起因"><a href="#起因" class="headerlink" title="起因"></a>起因</h2><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=437480685&auto=0&height=66"></iframe><p>&emsp;&emsp;第一篇文章写一下年后通关的神海4DLC吧，用来熟悉一下Markdown语法和用hexo搭建的博客吧。对于这个博客还有很多不熟悉的地方，样式也是照搬别人家的，慢慢的继续研究吧，欲速而不达。对于搭建自己的blog，虽然没有绑定域名，还是很兴奋的算是实现一个很酷的想法吧。<br><a id="more"></a></p><h2 id="背景"><a href="#背景" class="headerlink" title="背景"></a>背景</h2><p>&emsp;&emsp;首先，自己对神秘海域4是有特殊情感的，它是我第一款PS4游戏，第一个通关的PS4游戏，第一个获得白金奖杯的游戏。<br><img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1foqoa9v6vsj21hc0u0n1p.jpg" alt="神秘海域4"></p><p><img src="http://wx3.sinaimg.cn/mw690/7e99332fgy1foqo8xcz3kj21hc0u0doh.jpg" alt="神秘海域4"></p><p>  &emsp;&emsp;至今还记得，奈特在嵩山峻岭中飞檐走壁，在枪林弹雨中肉搏杂兵（我是近战莽夫流，哈哈），在长草中悄无声息的暗杀敌人，在沉船中和Rafe比剑，与妻子在家打电动，与山姆在碧海中遨游。最后还有在白金路上的苦苦挣扎。<br>  <img src="http://wx1.sinaimg.cn/mw690/7e99332fgy1foqoaei2pkj21hc0u0tgn.jpg" alt="此处输入图片的描述"></p><h2 id="感想"><a href="#感想" class="headerlink" title="感想"></a>感想</h2><p>  &emsp;&emsp;在这里先赞一下这个DLC做的不错，长度不是太长，但玩的我畅快淋漓，热血沸腾。这次故事发生在印度，但其文化背景我通关后还是弄不明白什么湿婆啊，象神啊。不过还是给我带来耳目一新的感觉，场景细节塑造的太好了（比神海4又进步了），看到那些雕像和壁画真的栩栩如生。战斗方面，敌人好像没本篇的强大，但是地形实在太恶劣，一会是悬崖，一会是四通八达的山洞（最后一章死的心态有点爆炸）。结尾的追逐战高潮迭起，狠揍那个反抗军首领解气，还有山姆宝宝的搞笑担当。虽然，知道神秘海域系列就此完结，但没有一丝遗憾，反而有一种由衷的满足感。在我的游戏史，可能忘不了这群欢乐的宝藏盗贼吧。希望，将来顽皮狗在最后生还者2给我更大的惊喜吧！<br>  <img src="http://wx2.sinaimg.cn/mw690/7e99332fgy1foqo857k9pj21hc0u0dsk.jpg" alt="此处输入图片的描述"></p><h2 id="结尾"><a href="#结尾" class="headerlink" title="结尾"></a>结尾</h2><p>&emsp;&emsp;未来，我会勤奋的更博（主要总结自己学习的心得）好好装扮这个blog，还要接触更多的技术。就说这么多吧，bye!</p>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;标签： PS4   神秘海域 失落的遗产&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&quot;起因&quot;&gt;&lt;a href=&quot;#起因&quot; class=&quot;headerlink&quot; title=&quot;起因&quot;&gt;&lt;/a&gt;起因&lt;/h2&gt;&lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=437480685&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;&amp;emsp;&amp;emsp;第一篇文章写一下年后通关的神海4DLC吧，用来熟悉一下Markdown语法和用hexo搭建的博客吧。对于这个博客还有很多不熟悉的地方，样式也是照搬别人家的，慢慢的继续研究吧，欲速而不达。对于搭建自己的blog，虽然没有绑定域名，还是很兴奋的算是实现一个很酷的想法吧。&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>Hello World</title>
    <link href="https://cir99.github.io/2018/02/23/hello-world/"/>
    <id>https://cir99.github.io/2018/02/23/hello-world/</id>
    <published>2018-02-23T01:57:23.200Z</published>
    <updated>2018-02-24T02:22:30.923Z</updated>
    
    <content type="html"><![CDATA[<script src="/assets/js/APlayer.min.js"> </script><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="86" src="//music.163.com/outchain/player?type=2&id=27979418&auto=0&height=66"></iframe><p>Welcome to <a href="https://hexo.io/" target="_blank" rel="noopener">Hexo</a>! This is your very first post. Check <a href="https://hexo.io/docs/" target="_blank" rel="noopener">documentation</a> for more info. If you get any problems when using Hexo, you can find the answer in <a href="https://hexo.io/docs/troubleshooting.html" target="_blank" rel="noopener">troubleshooting</a> or you can ask me on <a href="https://github.com/hexojs/hexo/issues" target="_blank" rel="noopener">GitHub</a>.<br><a id="more"></a> </p><h2 id="Quick-Start"><a href="#Quick-Start" class="headerlink" title="Quick Start"></a>Quick Start</h2><h3 id="Create-a-new-post"><a href="#Create-a-new-post" class="headerlink" title="Create a new post"></a>Create a new post</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo new <span class="string">"My New Post"</span></span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/writing.html" target="_blank" rel="noopener">Writing</a></p><h3 id="Run-server"><a href="#Run-server" class="headerlink" title="Run server"></a>Run server</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo server</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/server.html" target="_blank" rel="noopener">Server</a></p><h3 id="Generate-static-files"><a href="#Generate-static-files" class="headerlink" title="Generate static files"></a>Generate static files</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo generate</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/generating.html" target="_blank" rel="noopener">Generating</a></p><h3 id="Deploy-to-remote-sites"><a href="#Deploy-to-remote-sites" class="headerlink" title="Deploy to remote sites"></a>Deploy to remote sites</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">$ hexo deploy</span><br></pre></td></tr></table></figure><p>More info: <a href="https://hexo.io/docs/deployment.html" target="_blank" rel="noopener">Deployment</a></p>]]></content>
    
    <summary type="html">
    
      &lt;iframe frameborder=&quot;no&quot; border=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; width=&quot;330&quot; height=&quot;86&quot; src=&quot;//music.163.com/outchain/player?type=2&amp;id=27979418&amp;auto=0&amp;height=66&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Welcome to &lt;a href=&quot;https://hexo.io/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Hexo&lt;/a&gt;! This is your very first post. Check &lt;a href=&quot;https://hexo.io/docs/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;documentation&lt;/a&gt; for more info. If you get any problems when using Hexo, you can find the answer in &lt;a href=&quot;https://hexo.io/docs/troubleshooting.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;troubleshooting&lt;/a&gt; or you can ask me on &lt;a href=&quot;https://github.com/hexojs/hexo/issues&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub&lt;/a&gt;.&lt;br&gt;
    
    </summary>
    
    
  </entry>
  
</feed>
