<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Eighteen Blog</title>
  
  <subtitle>Eighteen Blog</subtitle>
  <link href="/atom.xml" rel="self"/>
  
  <link href="https://www.zsfmyz.top/"/>
  <updated>2020-09-24T02:26:18.032Z</updated>
  <id>https://www.zsfmyz.top/</id>
  
  <author>
    <name>赵十八</name>
    
  </author>
  
  <generator uri="http://hexo.io/">Hexo</generator>
  
  <entry>
    <title>CSS揭秘：6.复杂的背景图案（上）</title>
    <link href="https://www.zsfmyz.top/Css/CSS%E6%8F%AD%E7%A7%98%EF%BC%9A6.%E5%A4%8D%E6%9D%82%E7%9A%84%E8%83%8C%E6%99%AF%E5%9B%BE%E6%A1%88%EF%BC%88%E4%B8%8A%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Css/CSS揭秘：6.复杂的背景图案（上）/</id>
    <published>2020-09-24T03:14:27.000Z</published>
    <updated>2020-09-24T02:26:18.032Z</updated>
    
    <content type="html"><![CDATA[<h1 id="复杂的背景图案"><a href="#复杂的背景图案" class="headerlink" title="复杂的背景图案"></a>复杂的背景图案</h1><p>上一篇文章中我们学会了如何使用渐变实现条纹状的背景，但是实际上条纹背景并不是我们能实现的唯一的背景图案，利用渐变我们可以实现很多更为复杂的图案，本篇会介绍一些其他的简单而实用的背景图案。</p><a id="more"></a><font color="#999AAA"></font><hr style=" border:solid; width:100px; height:1px;" color="#000000" size="1""># 一、网格<font color="#999AAA">网格的原理其实很简单，目前我们已经实现了条纹背景，那么如果我们将条纹背景组合呢？互相穿插组合，那么是不是很简单就实现了各种各样的网格背景。## 1. 实色网格<font color="#999AAA">代码如下：<figure class="highlight css"><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="selector-tag">width</span>: 200<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">height</span>: 200<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">background-image</span>:</span><br><span class="line"><span class="selector-tag">linear-gradient</span>(<span class="selector-tag">rgba</span>(255,187,51, <span class="selector-class">.5</span>) 33%, <span class="selector-tag">rgba</span>(85,136,170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85,136,170, <span class="selector-class">.5</span>) 66%, <span class="selector-tag">rgba</span>(173,255,47, <span class="selector-class">.5</span>) 0),</span><br><span class="line"><span class="selector-tag">linear-gradient</span>(90<span class="selector-tag">deg</span>, <span class="selector-tag">rgba</span>(255,187,51,1) 33%, <span class="selector-tag">rgba</span>(85,136,170, 1) 0, <span class="selector-tag">rgba</span>(85,136,170, 1) 66%, <span class="selector-tag">rgba</span>(173,255,47, <span class="selector-class">.5</span>) 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure><font color="#999AAA">实际效果。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200918100511610.png#pic_center)## 2. 边框网格实现类似边框网格的效果，我们只需要将实色的网格色块改变成一条边框就可以了。方法为在渐变中设置一条**1px**长度的颜色，然后剩下的颜色为**透明色**（或者其他底色）。<font color="#999AAA">代码如下：<figure class="highlight css"><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="selector-tag">width</span>: 201<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">height</span>: 201<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">background-image</span>:</span><br><span class="line"><span class="selector-tag">linear-gradient</span>(<span class="selector-tag">rgba</span>(255,187,51, <span class="selector-class">.5</span>) 1<span class="selector-tag">px</span>, <span class="selector-tag">transparent</span> 0),</span><br><span class="line"><span class="selector-tag">linear-gradient</span>(90<span class="selector-tag">deg</span>,<span class="selector-tag">rgba</span>(255,187,51, <span class="selector-class">.5</span>) 1<span class="selector-tag">px</span>, <span class="selector-tag">transparent</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 20<span class="selector-tag">px</span> 20<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure><font color="#999AAA">实际效果。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200918102106767.png#pic_center)我们可以通过调整**background-size**来调整**网格**的大小。**注意**：整个图片的大小为**201x201**，由于我们设置的其实是**左边和上边**，所以同一个单位背景内只有上边和左边，没有下边和右边。所以如果设置总长为200px时，右边和下边会看不到边框。所以我们**长宽各 + 1**，以下一个背景的左上作为我们的右下边框。## 3. 波点除了实现类似格子一样的背景，我们还可以实现波点背景样式，这时我们就需要用到另外一个渐变：**径向渐变（radial-gradient）**，和线性渐变类似，效果是从背景中心点出发，向外渐变。<font color="#999AAA">代码如下：<figure class="highlight css"><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"></span><br><span class="line"><span class="selector-tag">width</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">height</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">background-image</span>: <span class="selector-tag">radial-gradient</span>(<span class="selector-tag">green</span> 3<span class="selector-tag">px</span>, <span class="selector-tag">yellowgreen</span> 0, <span class="selector-tag">yellowgreen</span> 6<span class="selector-tag">px</span>, <span class="selector-tag">transparent</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 20<span class="selector-tag">px</span> 20<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure><font color="#999AAA">实际效果。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200921085836761.png#pic_center)我们可以通过调整**background-size**来调整**波点密度**。**注意**：使用background-size调整波点背景的单个背景大小，调整的视觉效果是波点的密度大小，有时候会呈现出不一样效果和图案，比如当我们的波点连接起来的时候，我们的图案就变成了一个个菱形。<font color="#999AAA">实际效果。![在这里插入图片描述](https://img-blog.csdnimg.cn/20200921090246511.png#pic_center)<font color="#999AAA">以上效果只需要将background-size调整为12px，即背景尺寸 = 波点直径。<hr style=" border:solid; width:100px; height:1px;" color="#000000" size="1""><h2 id="4-棋盘"><a href="#4-棋盘" class="headerlink" title="4. 棋盘"></a>4. 棋盘</h2><p><img src="https://img-blog.csdnimg.cn/2020092109251135.png#pic_center" alt="在这里插入图片描述"></p><p>棋牌有点类似于我们在第一步做到的实色网格，不同的是棋盘是由一个实色和一个透明所组成的图案。所以，看似和实色网格类似，但是实现起来无法使用跟实色网格相同的实现方法（不信邪的话可以使尝试一下），那么我们如何实现棋牌类型的图案呢？也不难，我们使用直角三角形进行拼接。还得我们在实现斜向条纹时做的尝试吗？<a href="https://blog.csdn.net/lunhui1994_/article/details/106933714" target="_blank" rel="noopener">CSS揭秘：5.条纹背景（上）</a></p><p><font color="#999AAA">代码如下：<br><figure class="highlight css"><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><br><span class="line"><span class="selector-tag">width</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">height</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-id">#eee</span>;</span><br><span class="line"><span class="selector-tag">background-image</span>: <span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#bbb</span> 50%, <span class="selector-tag">transparent</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 30<span class="selector-tag">px</span> 30<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></font></p><p><font color="#999AAA">实际效果。<br><img src="https://img-blog.csdnimg.cn/20200921092328712.png#pic_center" alt="在这里插入图片描述"></font></p><ol><li>从刚开始的展示图案可以看出来，我们的正方形色块只是对角线的一半，那么我们的一个三角形就是1/4了，所以我们改造一下</li></ol><p><font color="#999AAA">代码如下：<br><figure class="highlight css"><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><br><span class="line"><span class="selector-tag">width</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">height</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-id">#eee</span>;</span><br><span class="line"><span class="selector-tag">background-image</span>: <span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#bbb</span> 25%, <span class="selector-tag">transparent</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 40<span class="selector-tag">px</span> 40<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></font></p><p><font color="#999AAA">实际效果。<br><img src="https://img-blog.csdnimg.cn/20200921092909744.png#pic_center" alt="在这里插入图片描述"></font></p><ol start="2"><li>现在我们得到一半的三角形，那么拼一个正方形还需要一个相反方向的三角形，我们再来一个背景<figure class="highlight css"><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="selector-tag">background-image</span>: </span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#bbb</span> 25%, <span class="selector-tag">transparent</span> 0),</span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-tag">transparent</span> 75%, <span class="selector-id">#bbb</span> 0);</span><br></pre></td></tr></table></figure></li></ol><p><img src="https://img-blog.csdnimg.cn/20200921092709910.png#pic_center" alt="在这里插入图片描述"></p><ol start="3"><li>到此我们得到了两个直角三角形，那么如何拼接成一个正方形呢？使用<strong>background-position</strong>调整直角三角形的位置即可。把右上角显示三角形的背景 向下 向左移动就阔以了<figure class="highlight css"><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><br><span class="line"><span class="selector-tag">width</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">height</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-id">#eee</span>;</span><br><span class="line"><span class="selector-tag">background-image</span>: </span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#bbb</span> 25%, <span class="selector-tag">transparent</span> 0),</span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-tag">transparent</span> 75%, <span class="selector-id">#bbb</span> 0);</span><br><span class="line"><span class="selector-tag">background-position</span>: 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span>, <span class="selector-tag">-20px</span> 20<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">background-size</span>: 40<span class="selector-tag">px</span> 40<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></li></ol><p><font color="#999AAA">实际效果。<br><img src="https://img-blog.csdnimg.cn/20200921094902113.png#pic_center" alt="在这里插入图片描述"><br>那么搞定了一个再搞定另外一个就很简单了。<br><figure class="highlight css"><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><br><span class="line"><span class="selector-tag">width</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">height</span><span class="selector-pseudo">:200px</span>;</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-id">#eee</span>;</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-id">#eee</span>;<span class="selector-tag">background-image</span>:    </span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#bbb</span> 25%, <span class="selector-tag">transparent</span> 0),    </span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-tag">transparent</span> 75%, <span class="selector-id">#bbb</span> 0),    </span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#bbb</span> 25%, <span class="selector-tag">transparent</span> 0),    </span><br><span class="line"><span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-tag">transparent</span> 75%, <span class="selector-id">#bbb</span> 0);</span><br><span class="line"><span class="selector-tag">background-position</span>: 0 0, <span class="selector-tag">-20px</span> 20<span class="selector-tag">px</span>,                     </span><br><span class="line">20<span class="selector-tag">px</span> <span class="selector-tag">-20px</span>, 0 0;</span><br><span class="line"><span class="selector-tag">background-size</span>: 40<span class="selector-tag">px</span> 40<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></font></p><p><font color="#999AAA">实际效果。<br><img src="https://img-blog.csdnimg.cn/20200921095309238.png#pic_center" alt="在这里插入图片描述"></font></p><h1 id="小结"><a href="#小结" class="headerlink" title="小结"></a>小结</h1><p>本篇主要对一些更为复杂的背景图案做出了一些介绍，分别有<strong>实色网格图案，边框网格图案，波点图案，棋盘图案</strong>，其中：</p><ol><li>实色网格用到了透明叠加的方法，实现了苏格兰裙一样的背景图案。</li><li>边框网格实际上是利用1px的渐变边框，实现其实类似纯div的左上border的方法。</li><li>波点使用到了<strong>radial-gradient</strong>径向渐变，使用方法和线性渐变相似。</li><li>棋盘图案则借助了background-position对直角三角形进行定位，以组合出正方形图案。</li></ol></font></font></font></font></font></font></font></font></font>]]></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;上一篇文章中我们学会了如何使用渐变实现条纹状的背景，但是实际上条纹背景并不是我们能实现的唯一的背景图案，利用渐变我们可以实现很多更为复杂的图案，本篇会介绍一些其他的简单而实用的背景图案。&lt;/p&gt;
    
    </summary>
    
      <category term="Css" scheme="https://www.zsfmyz.top/categories/Css/"/>
    
    
      <category term="Css" scheme="https://www.zsfmyz.top/tags/Css/"/>
    
  </entry>
  
  <entry>
    <title></title>
    <link href="https://www.zsfmyz.top/uncategorized/JavaScript%EF%BC%9Aleetcode_16.%20%E6%9C%80%E6%8E%A5%E8%BF%91%E7%9A%84%E4%B8%89%E6%95%B0%E4%B9%8B%E5%92%8C%EF%BC%88%E6%8E%92%E5%BA%8F+%E5%8F%8C%E6%8C%87%E9%92%88%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/uncategorized/JavaScript：leetcode_16. 最接近的三数之和（排序+双指针）/</id>
    <published>2020-09-24T02:42:23.973Z</published>
    <updated>2020-09-24T02:41:28.304Z</updated>
    
    <content type="html"><![CDATA[<hr><p>title: JavaScript：leetcode_16. 最接近的三数之和（排序+双指针）<br>date: 2020-06-24 16:27:44<br>categories: [‘Algorithm’,’每日一题’]<br>tags: Algorithm</p><h2 id="keywords-leetcode-16-最接近的三数之和（排序-双指针）"><a href="#keywords-leetcode-16-最接近的三数之和（排序-双指针）" class="headerlink" title="keywords: leetcode_16, 最接近的三数之和（排序+双指针）"></a>keywords: leetcode_16, 最接近的三数之和（排序+双指针）</h2><h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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">给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数，使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">示例：</span><br><span class="line"></span><br><span class="line">输入：nums = [-1,2,1,-4], target = 1</span><br><span class="line">输出：2</span><br><span class="line">解释：与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">提示：</span><br><span class="line"></span><br><span class="line">3 &lt;= nums.length &lt;= 10^3</span><br><span class="line">-10^3 &lt;= nums[i] &lt;= 10^3</span><br><span class="line">-10^4 &lt;= target &lt;= 10^4</span><br></pre></td></tr></table></figure><p>首先这个题可以使用3重for循环来遍历求值，并记录最接近target的值，但是会超时。</p><h3 id="解题思路一"><a href="#解题思路一" class="headerlink" title="解题思路一"></a>解题思路一</h3><ol><li>对数组进行从小到大排列</li><li>结果由三个数构成，我们提取出第一个数字<code>nums[i]</code>, 剩下的值就是<code>target-nums[i]</code>，我们需要在剩余数组元素中找到两个值<code>nums[pb]</code>,<code>nums[pc]</code>，最接近<code>target-nums[i]</code></li><li>由于三个元素不可重复，所以我们首先遍历<code>nums</code>，然后在每次遍历中，设定<code>pb</code>的初始值为 <code>i + 1</code>，<code>pc</code>的初始值为<code>nums.length - 1</code>。</li><li>当前我们所求的当前值为<code>target_close_help = nums[i] + nums[pb] + nums[pc];</code>，另外用<code>target_close</code>记录最接近target的值。</li><li>每次遍历，<code>nums[i]</code>是确定的。所以只需要判断<code>target_close_help</code> 是否<strong>大于</strong> <code>target</code>，如果<strong>大于</strong>则<code>pc--</code>，否则<code>pb++</code>；若<code>target_close_help</code><strong>等于</strong><code>target</code>则直接返回。<ol><li>由于<code>nums</code>从<strong>小到大</strong>排列，所以<code>pc--</code>代表<code>nums[pc]</code>的值会<strong>变小</strong>，<code>target_close_help</code>的值也会变<strong>小</strong>，这样才会慢慢接近<code>target</code>，反之亦然<code>pb++</code>是同样的道理。</li></ol></li><li>最后判读<code>target_close_help</code> 是否更接近<code>target</code>，若<strong>更接近</strong>则用<code>target_close</code>记录该次<code>target_close_help</code></li><li>若没有相等于target的情况出现，最后则返回target_close的值。<h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">nums</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">target</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> threeSumClosest = <span class="function"><span class="keyword">function</span>(<span class="params">nums, target</span>) </span>&#123;</span><br><span class="line">    nums = nums.sort(<span class="function">(<span class="params">a,b</span>) =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> a-b;</span><br><span class="line">    &#125;)</span><br><span class="line">    <span class="keyword">let</span> target_close = <span class="number">100001</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; nums.length; i++) &#123;</span><br><span class="line">        <span class="keyword">let</span> pb = i + <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">let</span> pc = nums.length - <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">while</span>(pc &gt; pb) &#123;</span><br><span class="line">            <span class="keyword">let</span> target_close_help = nums[i] + nums[pb] + nums[pc];</span><br><span class="line">            <span class="keyword">if</span> (target_close_help &lt; target) &#123;</span><br><span class="line">                pb++;</span><br><span class="line">            &#125; <span class="keyword">else</span> <span class="keyword">if</span> (target_close_help &gt; target) &#123;</span><br><span class="line">                pc--;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                <span class="keyword">return</span> target;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">Math</span>.abs(target_close_help - target) &lt; <span class="built_in">Math</span>.abs(target_close - target)) &#123;</span><br><span class="line">                target_close = target_close_help;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> target_close;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      
      
        &lt;hr&gt;
&lt;p&gt;title: JavaScript：leetcode_16. 最接近的三数之和（排序+双指针）&lt;br&gt;date: 2020-06-24 16:27:44&lt;br&gt;categories: [‘Algorithm’,’每日一题’]&lt;br&gt;tags: Algorithm&lt;
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title></title>
    <link href="https://www.zsfmyz.top/uncategorized/JavaScript%EF%BC%9Aleetcode_739.%20%E6%AF%8F%E6%97%A5%E6%B8%A9%E5%BA%A6%EF%BC%88%E6%A0%88%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/uncategorized/JavaScript：leetcode_739. 每日温度（栈）/</id>
    <published>2020-09-24T02:41:03.946Z</published>
    <updated>2020-09-24T02:40:49.455Z</updated>
    
    <content type="html"><![CDATA[<hr><p>title: JavaScript：leetcode_739. 每日温度（栈）<br>date: 2020-06-11 11:27:28<br>categories: [‘Algorithm’,’每日一题’]<br>tags: Algorithm</p><h2 id="keywords-leetcode-739-每日温度（栈）"><a href="#keywords-leetcode-739-每日温度（栈）" class="headerlink" title="keywords: leetcode_739, 每日温度（栈）"></a>keywords: leetcode_739, 每日温度（栈）</h2><h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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">根据每日 气温 列表，请重新生成一个列表，对应位置的输出是需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高，请在该位置用 0 来代替。</span><br><span class="line"></span><br><span class="line">例如，给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73]，你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。</span><br><span class="line"></span><br><span class="line">提示：气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度，都是在 [30, 100] 范围内的整数。</span><br></pre></td></tr></table></figure><p>暴力方法就不提了，直接循环判断即可。</p><h3 id="解题思路一（栈）"><a href="#解题思路一（栈）" class="headerlink" title="解题思路一（栈）"></a>解题思路一（栈）</h3><ol><li>首先<code>i</code>位的值，为<code>j-i</code>的差值。<code>j</code>为下一位比<code>i</code>处大的<code>最小下标</code>。</li><li>建立一个index栈，先入栈下标0，遍历T，判断<code>T[i]</code>和<code>T[index[index.length-1]]</code> (栈顶元素对应的T内值)。</li><li>若<code>T[i] &gt;  T[index[index.length-1]]</code> 将栈顶排出<code>indexTop = index.pop()</code>; 赋值<code>T[indexTop] = i - indexTop</code> 。</li><li>循环此步骤直到栈顶对应的T值大于T[i]。</li><li>最后将<code>i</code>置入栈内。</li><li>遍历完数组，最后将栈排空，栈内剩余值都为0。（我们也可以初始化结果数组为0）</li></ol><h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">T</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number[]&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> dailyTemperatures = <span class="function"><span class="keyword">function</span>(<span class="params">T</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> res = <span class="keyword">new</span> <span class="built_in">Array</span>(T.length).fill(<span class="number">0</span>);</span><br><span class="line">    <span class="keyword">let</span> index = [<span class="number">0</span>];</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">1</span>; i &lt; T.length; i++) &#123;</span><br><span class="line">        <span class="keyword">while</span> (T[i] &gt; T[index[index.length - <span class="number">1</span>]]) &#123;</span><br><span class="line">        <span class="keyword">let</span> indexTop = index.pop();</span><br><span class="line">            res[indexTop] = i - indexTop;</span><br><span class="line">        &#125;</span><br><span class="line">        index.push(i);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;hr&gt;
&lt;p&gt;title: JavaScript：leetcode_739. 每日温度（栈）&lt;br&gt;date: 2020-06-11 11:27:28&lt;br&gt;categories: [‘Algorithm’,’每日一题’]&lt;br&gt;tags: Algorithm&lt;/p&gt;
&lt;h2 
      
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title></title>
    <link href="https://www.zsfmyz.top/uncategorized/JavaScript%EF%BC%9Aleetcode_198.%20%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D%EF%BC%88%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/uncategorized/JavaScript：leetcode_198. 打家劫舍（动态规划）/</id>
    <published>2020-09-24T02:36:43.940Z</published>
    <updated>2020-09-24T02:36:33.289Z</updated>
    
    <content type="html"><![CDATA[<hr><p>title: JavaScript：leetcode_198. 打家劫舍（动态规划）<br>date: 2020-05-27 11:59:13<br>categories: [‘Algorithm’,’每日一题’]<br>tags: Algorithm</p><h2 id="keywords-leetcode-198-打家劫舍"><a href="#keywords-leetcode-198-打家劫舍" class="headerlink" title="keywords: leetcode_198, 打家劫舍"></a>keywords: leetcode_198, 打家劫舍</h2><h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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><br><span class="line"></span><br><span class="line">给定一个代表每个房屋存放金额的非负整数数组，计算你 不触动警报装置的情况下 ，一夜之内能够偷窃到的最高金额。</span><br><span class="line"></span><br><span class="line">示例 1:</span><br><span class="line"></span><br><span class="line">输入: [1,2,3,1]</span><br><span class="line">输出: 4</span><br><span class="line">解释: 偷窃 1 号房屋 (金额 = 1) ，然后偷窃 3 号房屋 (金额 = 3)。</span><br><span class="line">     偷窃到的最高金额 = 1 + 3 = 4 。</span><br><span class="line">示例 2:</span><br><span class="line"></span><br><span class="line">输入: [2,7,9,3,1]</span><br><span class="line">输出: 12</span><br><span class="line">解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9)，接着偷窃 5 号房屋 (金额 = 1)。</span><br><span class="line">     偷窃到的最高金额 = 2 + 9 + 1 = 12 。</span><br></pre></td></tr></table></figure><a id="more"></a><h3 id="解题思路一-动态规划，记录最优解"><a href="#解题思路一-动态规划，记录最优解" class="headerlink" title="解题思路一(动态规划，记录最优解)"></a>解题思路一(动态规划，记录最优解)</h3><ol><li>假如有一间房，偷取的最大值即为<code>nums[0].</code></li><li>假如有两间房，由于相邻房间不可取，偷取的最大值即为<code>Max(nums[0],nums[1])</code></li><li>假如有三间房，其取值有两种选择1. 偷取 <code>[1， 3]</code>房， 2. 偷取 <code>[2]</code> 房,取其最大值即可。</li><li>那么，对于第<code>i</code>间房就有：<code>stole[i] = Math.max((stole[i - 2] + nums[i]), stole[i - 1]);</code></li><li>最后，stole末尾的值即为最大值<h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">nums</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> rob = <span class="function"><span class="keyword">function</span>(<span class="params">nums</span>) </span>&#123;</span><br><span class="line">    nums = [<span class="number">0</span>, <span class="number">0</span>, ...nums]</span><br><span class="line">    <span class="keyword">let</span> stole = [<span class="number">0</span>, <span class="number">0</span>]</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">2</span>; i &lt; nums.length; i++) &#123;</span><br><span class="line">       stole[i] = <span class="built_in">Math</span>.max((stole[i - <span class="number">2</span>] + nums[i]), stole[i - <span class="number">1</span>]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> stole[stole.length - <span class="number">1</span>];</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol><h3 id="解题思路二（空间复杂度优化）"><a href="#解题思路二（空间复杂度优化）" class="headerlink" title="解题思路二（空间复杂度优化）"></a>解题思路二（空间复杂度优化）</h3><ol><li>以上代码，stole中其实只用到了末尾两位的值，所以我们可以将stole数组长度固定在2.</li><li>不需要保存所有的stole情况。<h3 id="代码实现二"><a href="#代码实现二" class="headerlink" title="代码实现二"></a>代码实现二</h3><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="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">nums</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> rob = <span class="function"><span class="keyword">function</span>(<span class="params">nums</span>) </span>&#123;</span><br><span class="line">    nums = [<span class="number">0</span>, <span class="number">0</span>, ...nums]</span><br><span class="line">    <span class="keyword">let</span> stole = [<span class="number">0</span>, <span class="number">0</span>]</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">2</span>; i &lt; nums.length; i++) &#123;</span><br><span class="line">       <span class="keyword">let</span> help = stole[<span class="number">1</span>];</span><br><span class="line">       stole[<span class="number">1</span>] = <span class="built_in">Math</span>.max((stole[<span class="number">0</span>] + nums[i]), stole[<span class="number">1</span>]);</span><br><span class="line">       stole[<span class="number">0</span>] = help;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> stole[<span class="number">1</span>];</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      &lt;hr&gt;
&lt;p&gt;title: JavaScript：leetcode_198. 打家劫舍（动态规划）&lt;br&gt;date: 2020-05-27 11:59:13&lt;br&gt;categories: [‘Algorithm’,’每日一题’]&lt;br&gt;tags: Algorithm&lt;/p&gt;
&lt;h2 id=&quot;keywords-leetcode-198-打家劫舍&quot;&gt;&lt;a href=&quot;#keywords-leetcode-198-打家劫舍&quot; class=&quot;headerlink&quot; title=&quot;keywords: leetcode_198, 打家劫舍&quot;&gt;&lt;/a&gt;keywords: leetcode_198, 打家劫舍&lt;/h2&gt;&lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;你是一个专业的小偷，计划偷窃沿街的房屋。每间房内都藏有一定的现金，影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统，如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;给定一个代表每个房屋存放金额的非负整数数组，计算你 不触动警报装置的情况下 ，一夜之内能够偷窃到的最高金额。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;示例 1:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输入: [1,2,3,1]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输出: 4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;解释: 偷窃 1 号房屋 (金额 = 1) ，然后偷窃 3 号房屋 (金额 = 3)。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     偷窃到的最高金额 = 1 + 3 = 4 。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;示例 2:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输入: [2,7,9,3,1]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输出: 12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;解释: 偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9)，接着偷窃 5 号房屋 (金额 = 1)。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;     偷窃到的最高金额 = 2 + 9 + 1 = 12 。&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
    
  </entry>
  
  <entry>
    <title>CSS揭秘：5.条纹背景（上）</title>
    <link href="https://www.zsfmyz.top/Css/CSS%E6%8F%AD%E7%A7%98%EF%BC%9A5.%E6%9D%A1%E7%BA%B9%E8%83%8C%E6%99%AF%EF%BC%88%E4%B8%8A%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Css/CSS揭秘：5.条纹背景（上）/</id>
    <published>2020-09-23T03:14:27.000Z</published>
    <updated>2020-09-24T02:25:36.899Z</updated>
    
    <content type="html"><![CDATA[<h1 id="条纹背景"><a href="#条纹背景" class="headerlink" title="条纹背景"></a>条纹背景</h1><blockquote><p>背景知识：CSS线性渐变，background-size</p></blockquote><h2 id="CSS线性渐变"><a href="#CSS线性渐变" class="headerlink" title=" CSS线性渐变"></a> CSS线性渐变</h2><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-tag">red</span>, <span class="selector-tag">yellow</span>, <span class="selector-tag">blue</span>);</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-tag">red</span> 0%, <span class="selector-tag">yellow</span> 50%, <span class="selector-tag">blue</span> 100%);</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-tag">to</span> <span class="selector-tag">right</span>, <span class="selector-tag">red</span> 0%, <span class="selector-tag">yellow</span> 50%, <span class="selector-tag">blue</span> 100%);</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(90<span class="selector-tag">deg</span>, <span class="selector-tag">red</span> 0%, <span class="selector-tag">yellow</span> 50%, <span class="selector-tag">blue</span> 100%);</span><br></pre></td></tr></table></figure><ol><li><code>to right</code>代表渐变偏移角度，<code>to right</code> (相当于<code>90deg</code>)</li><li><code>red，yellow，blue</code>代表渐变色，表示从<code>red - yellow - blue (相当于red 0% - yellow 50% - blue 100%)</code>。 意思是从0%距离处为red，通过0%-50%的距离渐变到yellow，再通过50%-100%的距离渐变到blue。<ol><li>linear-gradient(90deg, red 0%, yellow 50%, blue <code>0</code>) 等价于 linear-gradient(90deg, red 0%, yellow 50%, blue <code>50%</code>) 因为当你的色标位置值设置为0时，会自动调整为前一个色标位置值。</li><li>linear-gradient(90deg, red 20%, yellow 50%, blue 100%); 代表从<strong>0-20%都为red色</strong>。</li><li>linear-gradient(90deg, red <code>20%</code>, yellow <code>20%</code>, blue 100%); 代表从20%处颜色<strong>突然</strong>变化为yellow。（<strong>20%-20%之间没有渐变距离</strong>）</li><li>linear-gradient(90deg, red 20%, yellow <code>20%</code>, yellow <code>50%</code>, blue 100%); 代表从<code>20%-50%</code>处都是<strong>黄色</strong>，然后从50%处开始渐变直到100%变化为blue</li></ol></li></ol><h2 id="css线性渐变小结"><a href="#css线性渐变小结" class="headerlink" title="css线性渐变小结"></a>css线性渐变小结</h2><ol start="3"><li>line-gradient中相邻的两个颜色值代表，从色标A渐变到色标B。</li><li>颜色后紧跟的数值，代表AB两个颜色之间的渐变区间。（差值为渐变区间的长度，若差值为0，则为突变）</li><li>颜色后的数值为0时，自动取前一位的数值。</li></ol><a id="more"></a><h2 id="background-size"><a href="#background-size" class="headerlink" title="background-size"></a>background-size</h2><figure class="highlight css"><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="comment">/* 关键字 */</span></span><br><span class="line"><span class="selector-tag">background-size</span>: <span class="selector-tag">cover</span></span><br><span class="line"><span class="selector-tag">background-size</span>: <span class="selector-tag">contain</span></span><br><span class="line"></span><br><span class="line"><span class="comment">/* 一个值: 这个值指定图片的宽度，图片的高度隐式的为auto */</span></span><br><span class="line"><span class="selector-tag">background-size</span>: 50%</span><br><span class="line"><span class="selector-tag">background-size</span>: 3<span class="selector-tag">em</span></span><br><span class="line"><span class="selector-tag">background-size</span>: 12<span class="selector-tag">px</span></span><br><span class="line"><span class="selector-tag">background-size</span>: <span class="selector-tag">auto</span></span><br><span class="line"></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="selector-tag">background-size</span>: 50% <span class="selector-tag">auto</span></span><br><span class="line"><span class="selector-tag">background-size</span>: 3<span class="selector-tag">em</span> 25%</span><br><span class="line"><span class="selector-tag">background-size</span>: <span class="selector-tag">auto</span> 6<span class="selector-tag">px</span></span><br><span class="line"><span class="selector-tag">background-size</span>: <span class="selector-tag">auto</span> <span class="selector-tag">auto</span></span><br></pre></td></tr></table></figure><ol><li><code>cover</code>代表背景图片覆盖背景尺寸，可能只能看到放大后的背景图片的一部分。</li><li><code>contain</code>代表背景图片装入背景尺寸，可能会看到背景留白。</li><li><code>两个值</code>分别为宽，高，高可以省略，默认auto<blockquote><p>摘自MDN <a href="https://developer.mozilla.org/zh-CN/docs/Web/CSS/background-size" target="_blank" rel="noopener">background-size</a></p></blockquote><h2 id="水平条纹"><a href="#水平条纹" class="headerlink" title="水平条纹"></a>水平条纹</h2>首先我们来实现一下水平条纹的效果。<h3 id="水平-First-Try"><a href="#水平-First-Try" class="headerlink" title="水平 First Try"></a>水平 First Try</h3>我们了解了line-gradient的能力之后。我们可以通过极端缩小两个颜色之间的过渡间距来实现颜色突变的效果。<code>background: linear-gradient(#fb3 50%, #58a 50%);</code><blockquote><p>CSS图像（第三版）：如果多个色标具有相同的位置，它们会产生一个无限小的过渡区域。过渡的起止色分别是第一个和最后一个指定值。从效果上看，颜色会突然变化，而不是一个平滑的渐变过程。</p></blockquote><img src="https://img-blog.csdnimg.cn/20200703002131380.png" alt="在这里插入图片描述"><h3 id="水平-Second-Try"><a href="#水平-Second-Try" class="headerlink" title="水平 Second Try"></a>水平 Second Try</h3>目前看来我们已经实现了两个巨大的条纹，分别占据一半的高度。接下来我们再加上background-size的能力。<code>background-size: 100% 20px;</code><br><img src="https://img-blog.csdnimg.cn/20200703002828821.png" alt="在这里插入图片描述"><br>我们通过控制背景的尺寸，高度设置为20px，那么，各占50%背景尺寸高度的实际尺寸就变成了10px高。再加上背景的默认是重复平铺的，所以就实现了条纹的效果了。<h3 id="水平-Third-Try"><a href="#水平-Third-Try" class="headerlink" title="水平 Third Try"></a>水平 Third Try</h3>现在实现了两种颜色的交叉条纹。那么如果三种颜色，四种颜色怎么办呢？我想看到这里大家思考之后都会知道如何实现。<figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-id">#fb3</span> 33%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 66%, <span class="selector-tag">yellowgreen</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 100% 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></li></ol><p><img src="https://img-blog.csdnimg.cn/20200703004052995.png" alt="在这里插入图片描述"><br>水平条纹的颜色基本都可以实现了</p><h3 id="水平-Forth-Try"><a href="#水平-Forth-Try" class="headerlink" title="水平 Forth Try"></a>水平 Forth Try</h3><p> 我们再来尝试尝试加上透明度的效果</p><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-tag">rgba</span>(255, 187, 51, 0<span class="selector-class">.9</span>) 0%, <span class="selector-tag">rgba</span>(255, 187, 51, 0<span class="selector-class">.2</span>) 33%, <span class="selector-tag">rgba</span>(85, 136, 170, 0<span class="selector-class">.9</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, 0<span class="selector-class">.2</span>) 66%, <span class="selector-tag">rgba</span>(154, 205, 50, 0<span class="selector-class">.9</span>) 0, <span class="selector-tag">rgba</span>(154, 205, 50, 0<span class="selector-class">.2</span>) 100%);</span><br><span class="line"><span class="comment">/* background: linear-gradient(rgba(255, 187, 51, 0.2) 0%, rgba(255, 187, 51, 0.9) 33%, rgba(85, 136, 170, 0.2) 0, rgba(85, 136, 170, 0.9) 66%, rgba(154, 205, 50, 0.2) 0, rgba(154, 205, 50, 0.9) 100%); */</span></span><br><span class="line"><span class="selector-tag">background-size</span>: 100% 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/20200703005540472.png" alt="在这里插入图片描述"><br><figure class="highlight css"><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><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-tag">rgba</span>(255, 187, 51, 0<span class="selector-class">.2</span>) 0%, <span class="selector-tag">rgba</span>(255, 187, 51, 0<span class="selector-class">.9</span>) 33%, <span class="selector-tag">rgba</span>(85, 136, 170, 0<span class="selector-class">.2</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, 0<span class="selector-class">.9</span>) 66%, <span class="selector-tag">rgba</span>(154, 205, 50, 0<span class="selector-class">.2</span>) 0, <span class="selector-tag">rgba</span>(154, 205, 50, 0<span class="selector-class">.9</span>) 100%);</span><br><span class="line"><span class="selector-tag">background-size</span>: 100% 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/20200703005620954.png" alt="在这里插入图片描述"><br>加上了透明度配合渐变，实现了一些立体凹陷和饱满的条纹效果。</p><h2 id="垂直条纹"><a href="#垂直条纹" class="headerlink" title="垂直条纹"></a>垂直条纹</h2><p>实现过了水平条纹，垂直条纹还不是手到擒来。<br>我们只需要在上述的水平条纹代码中做两处改变即可。</p><ol><li>渐变里参数添加角度，to right 或者 90deg </li><li>background-size 参数互换位置。</li></ol><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(90<span class="selector-tag">deg</span>, <span class="selector-id">#fb3</span> 33%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 66%, <span class="selector-tag">yellowgreen</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 100%;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/20200703010130334.png" alt="在这里插入图片描述"><br>其他效果留给大家去实践~</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;blockquote&gt;
&lt;p&gt;背景知识：CSS线性渐变，background-size&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;CSS线性渐变&quot;&gt;&lt;a href=&quot;#CSS线性渐变&quot; class=&quot;headerlink&quot; title=&quot; CSS线性渐变&quot;&gt;&lt;/a&gt; CSS线性渐变&lt;/h2&gt;&lt;figure class=&quot;highlight css&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;selector-tag&quot;&gt;background&lt;/span&gt;: &lt;span class=&quot;selector-tag&quot;&gt;linear-gradient&lt;/span&gt;(&lt;span class=&quot;selector-tag&quot;&gt;red&lt;/span&gt;, &lt;span class=&quot;selector-tag&quot;&gt;yellow&lt;/span&gt;, &lt;span class=&quot;selector-tag&quot;&gt;blue&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;selector-tag&quot;&gt;background&lt;/span&gt;: &lt;span class=&quot;selector-tag&quot;&gt;linear-gradient&lt;/span&gt;(&lt;span class=&quot;selector-tag&quot;&gt;red&lt;/span&gt; 0%, &lt;span class=&quot;selector-tag&quot;&gt;yellow&lt;/span&gt; 50%, &lt;span class=&quot;selector-tag&quot;&gt;blue&lt;/span&gt; 100%);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;selector-tag&quot;&gt;background&lt;/span&gt;: &lt;span class=&quot;selector-tag&quot;&gt;linear-gradient&lt;/span&gt;(&lt;span class=&quot;selector-tag&quot;&gt;to&lt;/span&gt; &lt;span class=&quot;selector-tag&quot;&gt;right&lt;/span&gt;, &lt;span class=&quot;selector-tag&quot;&gt;red&lt;/span&gt; 0%, &lt;span class=&quot;selector-tag&quot;&gt;yellow&lt;/span&gt; 50%, &lt;span class=&quot;selector-tag&quot;&gt;blue&lt;/span&gt; 100%);&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;selector-tag&quot;&gt;background&lt;/span&gt;: &lt;span class=&quot;selector-tag&quot;&gt;linear-gradient&lt;/span&gt;(90&lt;span class=&quot;selector-tag&quot;&gt;deg&lt;/span&gt;, &lt;span class=&quot;selector-tag&quot;&gt;red&lt;/span&gt; 0%, &lt;span class=&quot;selector-tag&quot;&gt;yellow&lt;/span&gt; 50%, &lt;span class=&quot;selector-tag&quot;&gt;blue&lt;/span&gt; 100%);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;to right&lt;/code&gt;代表渐变偏移角度，&lt;code&gt;to right&lt;/code&gt; (相当于&lt;code&gt;90deg&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;red，yellow，blue&lt;/code&gt;代表渐变色，表示从&lt;code&gt;red - yellow - blue (相当于red 0% - yellow 50% - blue 100%)&lt;/code&gt;。 意思是从0%距离处为red，通过0%-50%的距离渐变到yellow，再通过50%-100%的距离渐变到blue。&lt;ol&gt;
&lt;li&gt;linear-gradient(90deg, red 0%, yellow 50%, blue &lt;code&gt;0&lt;/code&gt;) 等价于 linear-gradient(90deg, red 0%, yellow 50%, blue &lt;code&gt;50%&lt;/code&gt;) 因为当你的色标位置值设置为0时，会自动调整为前一个色标位置值。&lt;/li&gt;
&lt;li&gt;linear-gradient(90deg, red 20%, yellow 50%, blue 100%); 代表从&lt;strong&gt;0-20%都为red色&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;linear-gradient(90deg, red &lt;code&gt;20%&lt;/code&gt;, yellow &lt;code&gt;20%&lt;/code&gt;, blue 100%); 代表从20%处颜色&lt;strong&gt;突然&lt;/strong&gt;变化为yellow。（&lt;strong&gt;20%-20%之间没有渐变距离&lt;/strong&gt;）&lt;/li&gt;
&lt;li&gt;linear-gradient(90deg, red 20%, yellow &lt;code&gt;20%&lt;/code&gt;, yellow &lt;code&gt;50%&lt;/code&gt;, blue 100%); 代表从&lt;code&gt;20%-50%&lt;/code&gt;处都是&lt;strong&gt;黄色&lt;/strong&gt;，然后从50%处开始渐变直到100%变化为blue&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;css线性渐变小结&quot;&gt;&lt;a href=&quot;#css线性渐变小结&quot; class=&quot;headerlink&quot; title=&quot;css线性渐变小结&quot;&gt;&lt;/a&gt;css线性渐变小结&lt;/h2&gt;&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;line-gradient中相邻的两个颜色值代表，从色标A渐变到色标B。&lt;/li&gt;
&lt;li&gt;颜色后紧跟的数值，代表AB两个颜色之间的渐变区间。（差值为渐变区间的长度，若差值为0，则为突变）&lt;/li&gt;
&lt;li&gt;颜色后的数值为0时，自动取前一位的数值。&lt;/li&gt;
&lt;/ol&gt;
    
    </summary>
    
      <category term="Css" scheme="https://www.zsfmyz.top/categories/Css/"/>
    
    
      <category term="Css" scheme="https://www.zsfmyz.top/tags/Css/"/>
    
  </entry>
  
  <entry>
    <title>CSS揭秘：5.条纹背景（下）</title>
    <link href="https://www.zsfmyz.top/Css/CSS%E6%8F%AD%E7%A7%98%EF%BC%9A5.%E6%9D%A1%E7%BA%B9%E8%83%8C%E6%99%AF%EF%BC%88%E4%B8%8B%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Css/CSS揭秘：5.条纹背景（下）/</id>
    <published>2020-09-23T03:14:27.000Z</published>
    <updated>2020-09-24T02:21:31.370Z</updated>
    
    <content type="html"><![CDATA[<p>上篇文章讲述了实现条纹效果所使用的CSS特性并实现了水平和垂直条纹，接下来我们来实现斜向条纹。</p><a id="more"></a><p>回忆一下之前的效果</p><p>水平条纹</p><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-id">#fb3</span> 33%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 66%, <span class="selector-tag">yellowgreen</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 100% 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/20200703004052995.png" alt="在这里插入图片描述"><br> 垂直条纹<br><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(90<span class="selector-tag">deg</span>, <span class="selector-id">#fb3</span> 33%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 66%, <span class="selector-tag">yellowgreen</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 100%;</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/20200703010130334.png" alt="在这里插入图片描述"></p><h2 id="一、斜向条纹"><a href="#一、斜向条纹" class="headerlink" title="一、斜向条纹"></a>一、斜向条纹</h2><p>现在我们来试一下斜向条纹的效果。</p><h3 id="1-斜向-First-Try"><a href="#1-斜向-First-Try" class="headerlink" title="1. 斜向 First Try"></a>1. 斜向 First Try</h3><p>类似垂直条纹一样，我们是不是可以先试一下45deg角度的效果呢？<br><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#fb3</span> 33%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 66%, <span class="selector-tag">yellowgreen</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></p><p> <img src="https://img-blog.csdnimg.cn/20200707224917963.png" alt="在这里插入图片描述"><br> 看来效果并不是我们想象的那样。</p><h3 id="2-斜向-Second-Try-双条纹"><a href="#2-斜向-Second-Try-双条纹" class="headerlink" title="2. 斜向 Second Try 双条纹"></a>2. 斜向 Second Try 双条纹</h3><p> 第一次尝试失败了，但是失败的经验还是有的，我们发现事实上，图片是斜过来的，但是是单片斜过来的。那么如果我们每一个单片的部分可以<strong>无缝对接</strong>，那是不是就有这个效果了呢？？？<br> 先来试一下双色条纹的<br><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#fb3</span> 25%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 50%, <span class="selector-id">#fb3</span> 0, <span class="selector-id">#fb3</span> 75%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 100%);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></p><p> <img src="https://img-blog.csdnimg.cn/20200707225023196.png" alt="在这里插入图片描述"><br> 我们通过制造一个个的相同无缝单片来<code>无缝</code>组成了斜向的效果，上图中的单片<br> <img src="https://img-blog.csdnimg.cn/2020070722525997.png" alt="在这里插入图片描述"></p><h3 id="3-斜向-Third-Try-三条纹"><a href="#3-斜向-Third-Try-三条纹" class="headerlink" title="3. 斜向 Third Try 三条纹"></a>3. 斜向 Third Try 三条纹</h3><p>来试一下三条纹的<br><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#fb3</span> 16<span class="selector-class">.6666</span>%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 33<span class="selector-class">.3333</span>%, <span class="selector-tag">yellowgreen</span> 0, <span class="selector-tag">yellowgreen</span> 50%, <span class="selector-id">#fb3</span> 0, <span class="selector-id">#fb3</span> 66<span class="selector-class">.6666</span>%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 83<span class="selector-class">.3333</span>%, <span class="selector-tag">yellowgreen</span> 0, <span class="selector-tag">yellowgreen</span> 100%);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/20200708092318421.png" alt="在这里插入图片描述"></p><h3 id="4-斜向-Forth-Try-同色间隔条纹"><a href="#4-斜向-Forth-Try-同色间隔条纹" class="headerlink" title="4. 斜向 Forth Try 同色间隔条纹"></a>4. 斜向 Forth Try 同色间隔条纹</h3><p>来试一下同色间隔条纹<br><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#58a</span> 25%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 50%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 75%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 100%);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/20200708093023181.png" alt="在这里插入图片描述"></p><p>斜向的效果现在应该也已经掌握了，我们只需要遵守切片间可以无缝交接的原则即可。</p><h3 id="5-斜向-Fifth-Try"><a href="#5-斜向-Fifth-Try" class="headerlink" title="5. 斜向 Fifth Try"></a>5. 斜向 Fifth Try</h3><p>实现了45度角，我们再试一下60度角吧~ 我们把45改为60.<br><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(60<span class="selector-tag">deg</span>, <span class="selector-id">#58a</span> 25%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 50%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 75%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 100%);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></p><p>很显然失败了啊，除了45度角应该其他的比较难以实现了。<br><img src="https://img-blog.csdnimg.cn/20200708093435612.png" alt="在这里插入图片描述"></p><h3 id="6-斜向-Sixth-Try-60deg"><a href="#6-斜向-Sixth-Try-60deg" class="headerlink" title="6. 斜向 Sixth Try 60deg"></a>6. 斜向 Sixth Try 60deg</h3><p>别担心，我们还有一个办法，使用<code>repeating-linear-gradient</code>专门用来创建重复的线性渐变图像的。用法和linear-gradient类似。但是使用上还是有一些小细节需要注意。<br><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">background</span>: <span class="selector-tag">repeating-linear-gradient</span>(60<span class="selector-tag">deg</span>, <span class="selector-id">#58a</span> 25%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 50%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 75%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 100%);</span><br></pre></td></tr></table></figure></p><p><del>background-size: 60px 60px;</del>  记得这次要把size删掉了。我们不再需要了。<br>看，下面的效果已经实现了，这个方法可以实现任何角度的斜向条纹。</p><p><img src="https://img-blog.csdnimg.cn/20200708094400556.png" alt="在这里插入图片描述"></p><h1 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h1><p>到现在我们已经实现了条纹效果的大部分情况，包括横向，垂直，斜向（45deg 和 任意角）。<br>核心css特性为：<code>background: linear-gradient(#fb3 33%, #58a 0, #58a 66%, yellowgreen 0);</code> 如果忘记了用法可以去<a href="https://blog.csdn.net/lunhui1994_/article/details/106933714" target="_blank" rel="noopener">上篇</a>开头再复习一下。</p><ol><li><p>横向条纹 </p> <figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(<span class="selector-id">#fb3</span> 33%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 66%, <span class="selector-tag">yellowgreen</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 100% 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></li><li><p>垂直条纹 <code>90deg</code></p> <figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(90<span class="selector-tag">deg</span>, <span class="selector-id">#fb3</span> 33%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 66%, <span class="selector-tag">yellowgreen</span> 0);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 100%;</span><br></pre></td></tr></table></figure></li><li><p>斜向条纹</p><ol><li><p><code>45deg</code> + 可无缝拼接的单片条纹</p><figure class="highlight css"><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="selector-tag">background</span>: <span class="selector-tag">linear-gradient</span>(45<span class="selector-tag">deg</span>, <span class="selector-id">#fb3</span> 25%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 50%, <span class="selector-id">#fb3</span> 0, <span class="selector-id">#fb3</span> 75%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 100%);</span><br><span class="line"><span class="selector-tag">background-size</span>: 60<span class="selector-tag">px</span> 60<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></li><li><p><code>repeating-linear-gradient()</code> 去掉background-size</p>  <figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">background</span>: <span class="selector-tag">repeating-linear-gradient</span>(60<span class="selector-tag">deg</span>, <span class="selector-id">#58a</span> 25%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 50%, <span class="selector-id">#58a</span> 0, <span class="selector-id">#58a</span> 75%, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 0, <span class="selector-tag">rgba</span>(85, 136, 170, <span class="selector-class">.5</span>) 100%);</span><br></pre></td></tr></table></figure></li></ol></li></ol>]]></content>
    
    <summary type="html">
    
      &lt;p&gt;上篇文章讲述了实现条纹效果所使用的CSS特性并实现了水平和垂直条纹，接下来我们来实现斜向条纹。&lt;/p&gt;
    
    </summary>
    
      <category term="Css" scheme="https://www.zsfmyz.top/categories/Css/"/>
    
    
      <category term="Css" scheme="https://www.zsfmyz.top/tags/Css/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_209. 长度最小的子数组（滑动窗口 + 双指针）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_209.%20%E9%95%BF%E5%BA%A6%E6%9C%80%E5%B0%8F%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84%EF%BC%88%E6%BB%91%E5%8A%A8%E7%AA%97%E5%8F%A3%20+%20%E5%8F%8C%E6%8C%87%E9%92%88%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_209. 长度最小的子数组（滑动窗口 + 双指针）/</id>
    <published>2020-06-28T16:32:16.000Z</published>
    <updated>2020-09-24T02:43:12.112Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><p>给定一个含有 n 个正整数的数组和一个正整数 s ，找出该数组中满足其和 ≥ s 的长度最小的连续子数组，并返回其长度。如果不存在符合条件的连续子数组，返回 0。</p><p>示例：</p><p>输入：s = 7, nums = [2,3,1,2,4,3]<br>输出：2<br>解释：子数组 [4,3] 是该条件下的长度最小的连续子数组。</p><p>进阶：</p><p>如果你已经完成了 O(n) 时间复杂度的解法, 请尝试 O(n log n) 时间复杂度的解法。<br><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line"></span><br><span class="line">### 解题思路一</span><br><span class="line">1. 第一种方法，比较常规，符合我们的脑回路。</span><br><span class="line">2. 遍历数组，求遍历过的和sum。</span><br><span class="line">3. 当sum &gt;= s时，依次减去sum前面的数字，并判断是否依旧符合sum &gt;= s。</span><br><span class="line">4. 直到sum &gt;= s不成立，记录start--到end的长度。</span><br><span class="line">5. 继续遍历数组的下一位，循环2-3步骤，比较之后取最小长度。</span><br><span class="line">### 代码实现一</span><br><span class="line">```javascript</span><br><span class="line">/**</span><br><span class="line"> * @param &#123;number&#125; s</span><br><span class="line"> * @param &#123;number[]&#125; nums</span><br><span class="line"> * @return &#123;number&#125;</span><br><span class="line"> */</span><br><span class="line">var minSubArrayLen = function(s, nums) &#123;</span><br><span class="line">    let sum = 0;</span><br><span class="line">    let start = 0;</span><br><span class="line">    let end = 0;</span><br><span class="line">    let min = nums.length + 1;</span><br><span class="line">    for(let i = 0; i &lt; nums.length; i++) &#123;</span><br><span class="line">        sum += nums[i];</span><br><span class="line">        if (sum &gt;= s) &#123;</span><br><span class="line">            end = i;</span><br><span class="line">            while(sum &gt;= s) &#123;</span><br><span class="line">                sum -= nums[start++];</span><br><span class="line">            &#125;</span><br><span class="line">            start--;</span><br><span class="line">            sum += nums[start];</span><br><span class="line">            if (min &gt; (end - start)) &#123;</span><br><span class="line">                min = end - start + 1;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    if (min &gt; nums.length) &#123;</span><br><span class="line">        return 0;</span><br><span class="line">    &#125;</span><br><span class="line">    return min;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></p><h3 id="解题思路二（双指针）"><a href="#解题思路二（双指针）" class="headerlink" title="解题思路二（双指针）"></a>解题思路二（双指针）</h3><ol><li>先求出nums数组中第一次符合条件的情况。也就是看nums的前多少位&gt;=s。记录start，end。</li><li>start，end即为我们的双指针，分别代表子序列的开头和结尾。</li><li>如果sum &gt;= s, 我们就右移动start，求最小长度。</li><li>如果sum &lt; s, 我们就右移动end，求符合条件的情况。</li><li>直到end到达nums的尾部结束。<h3 id="代码实现二"><a href="#代码实现二" class="headerlink" title="代码实现二"></a>代码实现二</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">s</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">nums</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> minSubArrayLen = <span class="function"><span class="keyword">function</span>(<span class="params">s, nums</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> sum = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">let</span> start = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">let</span> end = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">let</span> min = nums.length + <span class="number">1</span>;</span><br><span class="line">    <span class="keyword">while</span> (sum &lt; s) &#123;</span><br><span class="line">        sum += nums[end++];</span><br><span class="line">    &#125;</span><br><span class="line">    min = <span class="built_in">Math</span>.min(end - start, min);</span><br><span class="line">    <span class="keyword">while</span>(end &lt;= nums.length) &#123;</span><br><span class="line">        <span class="keyword">if</span> (sum &gt;= s) &#123;</span><br><span class="line">            sum -= nums[start++];</span><br><span class="line">             <span class="keyword">if</span> (sum &gt;= s) &#123;</span><br><span class="line">                min = <span class="built_in">Math</span>.min(end - start, min);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            sum += nums[end++];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (min &gt; nums.length) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> min;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;p&gt;给定一个含有 n 个正整数的数组和一个正整数 s ，找出该数组中满足其和 ≥ s 的长度最小的连续子数组，并返回其长度。如果
      
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>CSS揭秘：4.边框内圆角</title>
    <link href="https://www.zsfmyz.top/Css/CSS%E6%8F%AD%E7%A7%98%EF%BC%9A4.%E8%BE%B9%E6%A1%86%E5%86%85%E5%9C%86%E8%A7%92/"/>
    <id>https://www.zsfmyz.top/Css/CSS揭秘：4.边框内圆角/</id>
    <published>2020-06-22T10:14:27.000Z</published>
    <updated>2020-09-24T02:24:11.955Z</updated>
    
    <content type="html"><![CDATA[<h1 id="边框内圆角"><a href="#边框内圆角" class="headerlink" title="边框内圆角"></a>边框内圆角</h1><blockquote><p>背景知识：box-shadow，outline，“多重边框”</p></blockquote><a id="more"></a><h2 id="一、两个div嵌套"><a href="#一、两个div嵌套" class="headerlink" title="一、两个div嵌套"></a>一、两个div嵌套</h2><p>两个div实现内圆角很容易，只需要内圆角外直角即可。</p><h3 id="div-First-Try"><a href="#div-First-Try" class="headerlink" title="div First Try"></a>div First Try</h3><figure class="highlight css"><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="selector-class">.box</span>&#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">200px</span>;</span><br><span class="line">        <span class="attribute">padding</span>: <span class="number">20px</span>;</span><br><span class="line">        <span class="attribute">background-color</span>: <span class="number">#655</span>;</span><br><span class="line">    &#125;</span><br><span class="line"><span class="selector-class">.content</span>&#123;</span><br><span class="line">       <span class="attribute">background-color</span>: tan;</span><br><span class="line">       <span class="attribute">border-radius</span>: .<span class="number">8em</span>;</span><br><span class="line">       <span class="attribute">padding</span>: <span class="number">20px</span>;</span><br><span class="line">   &#125;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/2020061823401650.png" alt="在这里插入图片描述"><br>这种方案更加灵活，我们可以在box上设置更多的样式，但是需要两个元素才能实现。</p><h2 id="二、box-shadow-outline-方案"><a href="#二、box-shadow-outline-方案" class="headerlink" title="二、box-shadow + outline 方案"></a>二、box-shadow + outline 方案</h2><p>还记得上篇中，outline和box-shadow对于圆角的区别显示吗？box-shadow会贴合border的圆角，outline不会。当我们仅需要实现一个实色的边框加内圆角，使用这个方案可以达到相同的效果。</p><h3 id="box-shadow-outline-First-Try"><a href="#box-shadow-outline-First-Try" class="headerlink" title="box-shadow + outline First Try"></a>box-shadow + outline First Try</h3><figure class="highlight css"><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="selector-tag">width</span>: 160<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">background</span>: <span class="selector-tag">tan</span>;</span><br><span class="line"><span class="selector-tag">border-radius</span>: <span class="selector-class">.8em</span>;</span><br><span class="line"><span class="selector-tag">padding</span>: 20<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">margin</span>: 20<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">box-shadow</span>: 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> <span class="selector-class">.4em</span> <span class="selector-id">#655</span>;</span><br><span class="line"><span class="selector-tag">outline</span>: 20<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-id">#655</span>;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/2020061823401650.png" alt="在这里插入图片描述"><br>这种方案中，<code>box-shadow</code>是用来填补<code>outline</code>和<code>border</code>之间的间隙的，如果不加<code>box-shadow</code>效果会是这样的。<br><img src="https://img-blog.csdnimg.cn/20200618235718311.png" alt="在这里插入图片描述"></p><ol><li>所以我们需要设置<code>box-shadow</code>的扩散半径来弥补四个类似三角形的空隙。</li><li>至于扩散半径的大小，我们可以用勾股定理设置。</li><li>也就是<code>border-radius</code>的圆角<strong>圆心到角的距离 - 半径</strong>。</li><li><p><code>(√2 - 1)r</code>； <code>√2 ≈ 1.4</code>那么<code>(√2 - 1)</code> 也就是在<code>0.4 - 0.5</code>之间,我们可以按0.5计算即可。也就是0.5r。</p></li><li><p>最后再回顾一下<code>box-shadow</code>的用法，<code>outline</code>和<code>border</code>用法一样，同时可以使用<code>outline-offset: -30px;</code>调整位置。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/* x偏移量 | y偏移量 | 阴影模糊半径 | 阴影扩散半径 | 阴影颜色 */</span><br></pre></td></tr></table></figure></li></ol><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">box-shadow</span>: 2<span class="selector-tag">px</span> 2<span class="selector-tag">px</span> 2<span class="selector-tag">px</span> <span class="selector-class">.4em</span> <span class="selector-id">#655</span>;</span><br></pre></td></tr></table></figure><p>说起这个有人会说，为什么不用<code>outline-offset:-10px;</code>这样来顶替<code>box-shadow</code>呢？试一下就知道了。<code>outline</code>的显示层级较<code>border</code>更高，所以border的圆角会被覆盖掉。<br><img src="https://img-blog.csdnimg.cn/20200618235913302.png" alt="在这里插入图片描述"></p><h2 id="最终案例代码"><a href="#最终案例代码" class="headerlink" title="最终案例代码"></a>最终案例代码</h2><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></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE <span class="meta-keyword">html</span>&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">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><br><span class="line"><span class="css">        <span class="selector-class">.box</span>&#123;</span></span><br><span class="line">            width: 200px;</span><br><span class="line">            padding: 20px;</span><br><span class="line"><span class="css">            <span class="selector-tag">background-color</span>: <span class="selector-id">#655</span>;</span></span><br><span class="line">        &#125;</span><br><span class="line"><span class="css">        <span class="selector-class">.content</span>&#123;</span></span><br><span class="line">            background-color: tan;</span><br><span class="line"><span class="css">            <span class="selector-tag">border-radius</span>: <span class="selector-class">.8em</span>;</span></span><br><span class="line">            padding: 20px;</span><br><span class="line">        &#125;</span><br><span class="line"><span class="css">        <span class="selector-class">.box2</span> &#123;</span></span><br><span class="line">            width: 160px;</span><br><span class="line">            background: tan;</span><br><span class="line"><span class="css">            <span class="selector-tag">border-radius</span>: <span class="selector-class">.8em</span>;</span></span><br><span class="line">            padding: 20px;</span><br><span class="line">            margin: 20px;</span><br><span class="line"><span class="css">            <span class="selector-tag">box-shadow</span>: 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> <span class="selector-class">.4em</span> <span class="selector-id">#655</span>;</span></span><br><span class="line"><span class="css">            <span class="selector-tag">outline</span>: 20<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-id">#655</span>;</span></span><br><span class="line">        &#125;</span><br><span class="line">    <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">"box"</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">"content"</span>&gt;</span></span><br><span class="line">            对酒当歌，人生几何。</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">div</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">hr</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">hr</span>&gt;</span></span><br><span class="line">    <span class="tag">&lt;<span class="name">hr</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">"box2"</span>&gt;</span></span><br><span class="line">        对酒当歌，人生几何。</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>]]></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;blockquote&gt;
&lt;p&gt;背景知识：box-shadow，outline，“多重边框”&lt;/p&gt;
&lt;/blockquote&gt;
    
    </summary>
    
      <category term="Css" scheme="https://www.zsfmyz.top/categories/Css/"/>
    
    
      <category term="Css" scheme="https://www.zsfmyz.top/tags/Css/"/>
    
  </entry>
  
  <entry>
    <title>CSS揭秘：3.灵活的背景定位</title>
    <link href="https://www.zsfmyz.top/Css/CSS%E6%8F%AD%E7%A7%98%EF%BC%9A3.%E7%81%B5%E6%B4%BB%E7%9A%84%E8%83%8C%E6%99%AF%E5%AE%9A%E4%BD%8D/"/>
    <id>https://www.zsfmyz.top/Css/CSS揭秘：3.灵活的背景定位/</id>
    <published>2020-06-13T10:14:27.000Z</published>
    <updated>2020-09-24T02:24:20.964Z</updated>
    
    <content type="html"><![CDATA[<h1 id="灵活的背景定位"><a href="#灵活的背景定位" class="headerlink" title="灵活的背景定位"></a>灵活的背景定位</h1><blockquote><p>背景知识：<code>background-position</code>的扩展语法，<code>background-origin，calc()</code><br><a id="more"></a></p></blockquote><h2 id="background-position扩展语法"><a href="#background-position扩展语法" class="headerlink" title="background-position扩展语法"></a>background-position扩展语法</h2><ol><li><strong>background-position扩展语法：</strong> css3 中background-position 语法可以通过在偏移量前指定关键字，来设置四条边的偏移量。 <figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">background-positon</span>: <span class="selector-tag">right</span> 20<span class="selector-tag">px</span> <span class="selector-tag">bottom</span> 10<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure></li></ol><h2 id="background-origin"><a href="#background-origin" class="headerlink" title="background-origin"></a>background-origin</h2><ol start="2"><li><strong>background-origin：</strong> css3 中 background-origin 可以指定背景图片的显示范围，默认以padding-box为准，即padding的外边沿。此时背景图片的位置将和padding一致。通常此方案更适合开发需求。<figure class="highlight css"><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="selector-tag">padding</span><span class="selector-pseudo">:20px</span>;</span><br><span class="line"><span class="selector-tag">background-origin</span>: <span class="selector-tag">content-box</span>;</span><br><span class="line"><span class="selector-tag">background-position</span>: 100% 100%;</span><br></pre></td></tr></table></figure></li></ol><h2 id="calc"><a href="#calc" class="headerlink" title="calc()"></a>calc()</h2><ol start="3"><li><strong>calc()：</strong> 允许填入 任意 <code>+ - * /</code> 四则运算组合的表达式。 <figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">background-position</span>: <span class="selector-tag">calc</span>(100% <span class="selector-tag">-</span> 20<span class="selector-tag">px</span>) <span class="selector-tag">calc</span>(100% <span class="selector-tag">-</span> 10<span class="selector-tag">px</span>);</span><br></pre></td></tr></table></figure></li></ol><blockquote><p>扩展：<code>border-box</code> <code>边框</code>的外边沿；<code>padding-box</code> <code>内边距</code>的外边沿； <code>content-box</code> <code>内容</code>的外边沿。</p></blockquote><h3 id="原效果"><a href="#原效果" class="headerlink" title="原效果"></a>原效果</h3><p><img src="https://img-blog.csdnimg.cn/2020061200291226.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><h3 id="最终效果"><a href="#最终效果" class="headerlink" title="最终效果"></a>最终效果</h3><p><img src="https://img-blog.csdnimg.cn/20200612002948787.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></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;blockquote&gt;
&lt;p&gt;背景知识：&lt;code&gt;background-position&lt;/code&gt;的扩展语法，&lt;code&gt;background-origin，calc()&lt;/code&gt;&lt;br&gt;
    
    </summary>
    
      <category term="Css" scheme="https://www.zsfmyz.top/categories/Css/"/>
    
    
      <category term="Css" scheme="https://www.zsfmyz.top/tags/Css/"/>
    
  </entry>
  
  <entry>
    <title>CSS揭秘：2.多重边框</title>
    <link href="https://www.zsfmyz.top/Css/CSS%E6%8F%AD%E7%A7%98%EF%BC%9A2.%E5%A4%9A%E9%87%8D%E8%BE%B9%E6%A1%86/"/>
    <id>https://www.zsfmyz.top/Css/CSS揭秘：2.多重边框/</id>
    <published>2020-06-12T10:14:27.000Z</published>
    <updated>2020-06-28T03:37:25.019Z</updated>
    
    <content type="html"><![CDATA[<h1 id="多重边框"><a href="#多重边框" class="headerlink" title="多重边框"></a>多重边框</h1><blockquote><p>背景知识：box-shadow的基本用法，outline基本用法</p></blockquote><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/* x偏移量 | y偏移量 | 阴影模糊半径 | 阴影扩散半径 | 阴影颜色 */</span><br></pre></td></tr></table></figure><figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">box-shadow</span>: 2<span class="selector-tag">px</span> 2<span class="selector-tag">px</span> 2<span class="selector-tag">px</span> 1<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(0, 0, 0, 0<span class="selector-class">.2</span>);</span><br></pre></td></tr></table></figure><p>以上是box-shadow的基本参数。box-shadow是为元素添加阴影效果的样式。但是我们可以通过对其属性的设置，呈现边框效果。<br><a id="more"></a></p><h2 id="box-shadow-方案"><a href="#box-shadow-方案" class="headerlink" title="box-shadow 方案"></a>box-shadow 方案</h2><h3 id="box-shadow-First-Try"><a href="#box-shadow-First-Try" class="headerlink" title="box-shadow First Try"></a>box-shadow First Try</h3><ol><li>将x偏移量 ，y偏移量设置为0px，此时阴影会在元素下面不会超出元素本身。</li><li>模糊度设为0px，使阴影呈现实体效果。</li><li>增大扩散半径，可以理解为阴影向外扩展半径。</li><li>此时阴影就像一条宽度为扩散半径的实线边框<figure class="highlight css"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">box-shadow</span>: 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 10<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(0, 0, 0, 0<span class="selector-class">.6</span>);</span><br></pre></td></tr></table></figure></li></ol><p><img src="https://img-blog.csdnimg.cn/20200610231531723.png" alt="在这里插入图片描述"></p><h3 id="box-shadow-Second-Try"><a href="#box-shadow-Second-Try" class="headerlink" title="box-shadow Second Try"></a>box-shadow Second Try</h3><p>box-shadow属性可以通过逗号分割添加多条阴影。<br><figure class="highlight css"><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="selector-tag">box-shadow</span>: 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 20<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(0, 0, 0, 0<span class="selector-class">.6</span>),</span><br><span class="line">            0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 40<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(120, 120, 120, 0<span class="selector-class">.6</span>);</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/20200610231807105.png" alt="!\[在这里插入图片描述\](https://img-blog.csdnimg.cn/20200610231706575.pn"><br>要注意的是，阴影是<code>层层叠加</code>的，第一条阴影在最上层，以此类推，且阴影的半径都是以元素<code>border</code>的<code>外边沿为起点</code>。所以如果你想要两条宽<code>20px</code>的阴影，那么两条阴影的<code>扩散半径</code>需要分别设置<code>20px</code>，<code>40px</code></p><hr><p>我们需要注意的是，阴影不会影响元素的布局，我们可以从它的字面意思，阴影来理解，它不占用任何空间。并且元素上的绑定事件，并不会在阴影上触发。效果如图<br><img src="https://img-blog.csdnimg.cn/20200610232610906.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><h3 id="box-shadow-Third-Try"><a href="#box-shadow-Third-Try" class="headerlink" title="box-shadow Third Try"></a>box-shadow Third Try</h3><p>那么如果我们需要阴影像我们预期的一样，跟border有相同的表现，我们可以增加同样的外边框margin来模拟出阴影占据的空间。<br><figure class="highlight css"><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="selector-tag">margin</span>: 40<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">box-shadow</span>: 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 20<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(0, 0, 0, 0<span class="selector-class">.6</span>),</span><br><span class="line">            0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 40<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(120, 120, 120, 0<span class="selector-class">.6</span>);</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/2020061023293232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><h3 id="box-shadow-Fourth-Try"><a href="#box-shadow-Fourth-Try" class="headerlink" title="box-shadow Fourth Try"></a>box-shadow Fourth Try</h3><p>目前来讲，阴影的扩展方向都是从<code>border外边沿向外扩。</code>它虽然模拟出了空间，但是仍旧不会触发元素上的事件，如果你想在<code>事件</code>上也同<code>border</code>的表现一样，那么可以设置<code>inset</code>属性，使其向内扩散，并通过内边距<code>padding</code>来模拟空间。<br><figure class="highlight css"><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="selector-tag">margin</span>: 40<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">background-clip</span>: <span class="selector-tag">content-box</span>;</span><br><span class="line"><span class="selector-tag">box-shadow</span>: 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 20<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(0, 0, 0, 0<span class="selector-class">.6</span>),</span><br><span class="line">            0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 0<span class="selector-tag">px</span> 40<span class="selector-tag">px</span> <span class="selector-tag">rgba</span>(120, 120, 120, 0<span class="selector-class">.6</span>);</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/20200610233456274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>需要注意的是，边框的顺序发生了反转。如果阴影边框设置了透明度，因为涉及到透明度颜色叠加，需要自己取色。同样的透明度也会被背景色穿透，如果不想被背景色影响，可设置<code>background-clip: content-box;</code></p><h2 id="outline-方案"><a href="#outline-方案" class="headerlink" title="outline 方案"></a>outline 方案</h2><p>outline可以实现两条边框的方案，同时更加灵活可以实现虚线边框。<br><strong>border 和 outline 很类似，但有如下区别：</strong></p><ol><li>轮廓不占据空间（同阴影），绘制于元素内容周围。</li><li>outline不一定贴合圆角。</li><li>我们可以通过outline-offset设置负值，来使轮廓显示在元素内部。<h3 id="outline-First-Try"><a href="#outline-First-Try" class="headerlink" title="outline  First Try"></a>outline  First Try</h3><figure class="highlight css"><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="selector-tag">border</span>: 10<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-tag">blue</span>;</span><br><span class="line"><span class="selector-tag">outline</span>: 10<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-tag">skyblue</span>;</span><br></pre></td></tr></table></figure></li></ol><p>不占据空间<br><img src="https://img-blog.csdnimg.cn/2020061023585033.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><h3 id="outline-Second-Try"><a href="#outline-Second-Try" class="headerlink" title="outline Second Try"></a>outline Second Try</h3><figure class="highlight css"><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="selector-tag">border</span>: 10<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-tag">blue</span>;</span><br><span class="line"><span class="selector-tag">outline</span>: 10<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-tag">skyblue</span>;</span><br><span class="line"><span class="selector-tag">border-radius</span>: 20<span class="selector-tag">px</span>;</span><br></pre></td></tr></table></figure><p>不贴合圆角<br><img src="https://img-blog.csdnimg.cn/20200611000119188.png" alt="在这里插入图片描述"></p><h3 id="outline-Third-Try"><a href="#outline-Third-Try" class="headerlink" title="outline Third Try"></a>outline Third Try</h3><p><code>outline-offset</code> 属性实现的缝边效果</p><figure class="highlight css"><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="selector-tag">background-color</span>: <span class="selector-id">#333</span>;</span><br><span class="line"><span class="selector-tag">outline</span>: 2<span class="selector-tag">px</span> <span class="selector-tag">dashed</span> <span class="selector-tag">white</span>;</span><br><span class="line"><span class="selector-tag">border-radius</span>: 20<span class="selector-tag">px</span>;</span><br><span class="line"><span class="selector-tag">outline-offset</span>: <span class="selector-tag">-30px</span>;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/20200611000409118.png" alt="在这里插入图片描述"></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;blockquote&gt;
&lt;p&gt;背景知识：box-shadow的基本用法，outline基本用法&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;/* x偏移量 | y偏移量 | 阴影模糊半径 | 阴影扩散半径 | 阴影颜色 */&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;figure class=&quot;highlight css&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;selector-tag&quot;&gt;box-shadow&lt;/span&gt;: 2&lt;span class=&quot;selector-tag&quot;&gt;px&lt;/span&gt; 2&lt;span class=&quot;selector-tag&quot;&gt;px&lt;/span&gt; 2&lt;span class=&quot;selector-tag&quot;&gt;px&lt;/span&gt; 1&lt;span class=&quot;selector-tag&quot;&gt;px&lt;/span&gt; &lt;span class=&quot;selector-tag&quot;&gt;rgba&lt;/span&gt;(0, 0, 0, 0&lt;span class=&quot;selector-class&quot;&gt;.2&lt;/span&gt;);&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
&lt;p&gt;以上是box-shadow的基本参数。box-shadow是为元素添加阴影效果的样式。但是我们可以通过对其属性的设置，呈现边框效果。&lt;br&gt;
    
    </summary>
    
      <category term="Css" scheme="https://www.zsfmyz.top/categories/Css/"/>
    
    
      <category term="Css" scheme="https://www.zsfmyz.top/tags/Css/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_9. 回文数（水题，三种方法）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_9.%20%E5%9B%9E%E6%96%87%E6%95%B0%EF%BC%88%E6%B0%B4%E9%A2%98%EF%BC%8C%E4%B8%89%E7%A7%8D%E6%96%B9%E6%B3%95%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_9. 回文数（水题，三种方法）/</id>
    <published>2020-06-10T02:42:50.000Z</published>
    <updated>2020-09-24T02:39:42.384Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">判断一个整数是否是回文数。回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。</span><br><span class="line"></span><br><span class="line">示例 1:</span><br><span class="line"></span><br><span class="line">输入: 121</span><br><span class="line">输出: true</span><br><span class="line">示例 2:</span><br><span class="line"></span><br><span class="line">输入: -121</span><br><span class="line">输出: false</span><br><span class="line">解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。</span><br><span class="line">示例 3:</span><br><span class="line"></span><br><span class="line">输入: 10</span><br><span class="line">输出: false</span><br><span class="line">解释: 从右向左读, 为 01 。因此它不是一个回文数。</span><br><span class="line">进阶:</span><br><span class="line"></span><br><span class="line">你能不将整数转为字符串来解决这个问题吗？</span><br></pre></td></tr></table></figure><h3 id="解题思路一（字符串反转）"><a href="#解题思路一（字符串反转）" class="headerlink" title="解题思路一（字符串反转）"></a>解题思路一（字符串反转）</h3><ol><li>第一反应数字转字符串，然后前后对比。可以解决问题。</li></ol><h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">x</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;boolean&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> isPalindrome = <span class="function"><span class="keyword">function</span>(<span class="params">x</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> xStr = x + <span class="string">''</span>;</span><br><span class="line">    <span class="keyword">let</span> mid = +(xStr.length &gt;&gt; <span class="number">1</span>) + (+xStr.length % <span class="number">2</span>);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; mid; i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (xStr.charAt(i) != xStr.charAt(xStr.length - i - <span class="number">1</span>)) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">false</span></span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="解题思路二（求得x的位数，xLen-Math-log10-x"><a href="#解题思路二（求得x的位数，xLen-Math-log10-x" class="headerlink" title="解题思路二（求得x的位数，xLen =  Math.log10(x))"></a>解题思路二（求得x的位数，xLen =  Math.log10(x))</h3><ol><li>求得长度，接下来跟字符串一样了。</li><li>parseInt(x / Math.pow(10, xLen)) 得到首位</li><li>x % 10 得到尾位</li><li>对比是否相等</li></ol><h3 id="代码实现二"><a href="#代码实现二" class="headerlink" title="代码实现二"></a>代码实现二</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">x</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;boolean&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> isPalindrome = <span class="function"><span class="keyword">function</span>(<span class="params">x</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span>(x &lt; <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> xLen = <span class="built_in">parseInt</span>(<span class="built_in">Math</span>.log10(x));</span><br><span class="line">    <span class="keyword">while</span>(x &gt;= <span class="number">1</span>) &#123;</span><br><span class="line">        <span class="keyword">if</span>(x % <span class="number">10</span> != <span class="built_in">parseInt</span>(x / <span class="built_in">Math</span>.pow(<span class="number">10</span>, xLen))) &#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">false</span></span><br><span class="line">        &#125;</span><br><span class="line">        x = x % <span class="built_in">Math</span>.pow(<span class="number">10</span>, xLen);</span><br><span class="line">        x = <span class="built_in">parseInt</span>(x /= <span class="number">10</span>);</span><br><span class="line">        xLen-=<span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="literal">true</span></span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h3 id="解题思路三（反转尾部"><a href="#解题思路三（反转尾部" class="headerlink" title="解题思路三（反转尾部)"></a>解题思路三（反转尾部)</h3><ol><li>这个是官方题解，反转尾部，直到前半部分小于等于反转后的尾部</li><li>将x的尾部移出来，反转。一直到x剩下的前半部分等于或者小于反转的尾部。</li><li>前半部分小于尾部，说明到了x的中间位。<ol><li>跳出循环时，回文数只有两种情况。</li><li>第一种，x为偶数，直接判断首尾是否相同。</li><li>第二种，x为奇数，尾部除以10，再进行判断。</li></ol></li></ol><h3 id="代码实现三"><a href="#代码实现三" class="headerlink" title="代码实现三"></a>代码实现三</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">x</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;boolean&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> isPalindrome = <span class="function"><span class="keyword">function</span>(<span class="params">x</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span>(x &lt; <span class="number">0</span> || (x % <span class="number">10</span> == <span class="number">0</span> &amp;&amp; x &gt; <span class="number">9</span>)) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span></span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> xTail = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">let</span> length = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">while</span>(x &gt; xTail) &#123;</span><br><span class="line">        xTail *= <span class="number">10</span>;</span><br><span class="line">        xTail += x % <span class="number">10</span>;</span><br><span class="line">        x = <span class="built_in">parseInt</span>(x / <span class="number">10</span>);</span><br><span class="line">        length++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (x == xTail || x == <span class="built_in">parseInt</span>(xTail / <span class="number">10</span>)) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">true</span></span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">false</span></span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pr
      
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_面试题46. 把数字翻译成字符串（斐波那契）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_%E9%9D%A2%E8%AF%95%E9%A2%9846.%20%E6%8A%8A%E6%95%B0%E5%AD%97%E7%BF%BB%E8%AF%91%E6%88%90%E5%AD%97%E7%AC%A6%E4%B8%B2%EF%BC%88%E6%96%90%E6%B3%A2%E9%82%A3%E5%A5%91%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_面试题46. 把数字翻译成字符串（斐波那契）/</id>
    <published>2020-06-09T02:49:48.000Z</published>
    <updated>2020-09-24T02:38:56.112Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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">给定一个数字，我们按照如下规则把它翻译为字符串：0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。一个数字可能有多个翻译。请编程实现一个函数，用来计算一个数字有多少种不同的翻译方法。</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">示例 1:</span><br><span class="line"></span><br><span class="line">输入: 12258</span><br><span class="line">输出: 5</span><br><span class="line">解释: 12258有5种不同的翻译，分别是&quot;bccfi&quot;, &quot;bwfi&quot;, &quot;bczi&quot;, &quot;mcfi&quot;和&quot;mzi&quot;</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">提示：</span><br><span class="line"></span><br><span class="line">0 &lt;= num &lt; 231</span><br></pre></td></tr></table></figure><h3 id="解题思路一（斐波那契数列）"><a href="#解题思路一（斐波那契数列）" class="headerlink" title="解题思路一（斐波那契数列）"></a>解题思路一（斐波那契数列）</h3><ol><li>我一般做题前喜欢先测试几个用例, 测试完发现这就是斐波那契数列</li><li>该题主要判断 <code>i-1, i</code> 两位组合成的数字是否在<code>(10, 25)</code>闭区间内. 如果在就是斐波那契<code>f(n) = f(n-1) + f(n-2)</code>, 否则跟上一种情况一致<code>f(n) = f(n-1)</code>.</li></ol><h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">num</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> translateNum = <span class="function"><span class="keyword">function</span>(<span class="params">num</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> numStr = num + <span class="string">''</span>;</span><br><span class="line">    <span class="keyword">let</span> res;</span><br><span class="line">    <span class="keyword">if</span> (+(numStr[<span class="number">0</span>] + numStr[<span class="number">1</span>]) &lt; <span class="number">26</span> &amp;&amp; +numStr[<span class="number">0</span>] &gt; <span class="number">0</span>) &#123;</span><br><span class="line">        res = [<span class="number">1</span>, <span class="number">2</span>];</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        res = [<span class="number">1</span>, <span class="number">1</span>];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="keyword">let</span> i = <span class="number">2</span>; i &lt; numStr.length; i++) &#123;</span><br><span class="line">        <span class="keyword">if</span> (+(numStr[i - <span class="number">1</span>] + numStr[i]) &lt; <span class="number">26</span> &amp;&amp; +numStr[i - <span class="number">1</span>] &gt; <span class="number">0</span>) &#123;</span><br><span class="line">            res[i] = res[i - <span class="number">1</span>] + res[i - <span class="number">2</span>];</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            res[i] = res[i - <span class="number">1</span>];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res[res.length<span class="number">-1</span>]</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pr
      
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>CSS揭秘：1.半透明边框</title>
    <link href="https://www.zsfmyz.top/Css/CSS%E6%8F%AD%E7%A7%98%EF%BC%9A1.%E5%8D%8A%E9%80%8F%E6%98%8E%E8%BE%B9%E6%A1%86/"/>
    <id>https://www.zsfmyz.top/Css/CSS揭秘：1.半透明边框/</id>
    <published>2020-06-07T10:14:27.000Z</published>
    <updated>2020-06-28T03:36:01.797Z</updated>
    
    <content type="html"><![CDATA[<h1 id="半透明边框"><a href="#半透明边框" class="headerlink" title="半透明边框"></a>半透明边框</h1><blockquote><p>背景知识：<code>RGBA/HSLA</code> 半透明颜色， 它们同样是一种颜色，并非只适用于背景。<br><code>background-clip</code> 背景裁切属性，定义了背景的延伸范围，是否延伸到<code>边框、内边距盒子、内容盒子，内容文字</code>下面。分别对应<code>border-box、padding-box、content-box、text</code>四个属性值<br><a id="more"></a></p></blockquote><h2 id="First-Try"><a href="#First-Try" class="headerlink" title="First Try"></a>First Try</h2><p>首先我们来尝试一下，假如我们想要实现一个半透明的边框，该如何写样式</p><figure class="highlight css"><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="selector-tag">border</span>: 10<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-tag">hsla</span>(0, 0%, 0%, 0<span class="selector-class">.5</span>);</span><br><span class="line"><span class="selector-tag">background-color</span>: <span class="selector-tag">white</span></span><br></pre></td></tr></table></figure><p>这段css样式，我们期待的效果是有一个<strong>半透明的边框</strong>。而实际效果是怎么样的呢？<br><img src="https://img-blog.csdnimg.cn/20200609231145786.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>  <strong>！！！？border 不见了</strong></p><h2 id="Second-Try"><a href="#Second-Try" class="headerlink" title="Second Try"></a>Second Try</h2><p>没错，边框不见了。这跟我们所期待的效果并不符合。原因在于，默认情况下，<strong>背景颜色会延伸到边框上</strong>，这点我们可以通过虚线边框来发现实际发生了什么。</p><figure class="highlight css"><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="selector-tag">border</span>: 30<span class="selector-tag">px</span> <span class="selector-tag">dashed</span> <span class="selector-tag">orange</span>;           </span><br><span class="line"><span class="selector-tag">background-color</span>: <span class="selector-tag">skyblue</span>;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/20200609231721914.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"><br>所以，实际上我们的透明边框其实是存在的，只不过由于<strong>背景颜色透过边框</strong>，导致最终呈现出如同一个跟背景颜色一致的边框的效果。</p><h2 id="Third-Try"><a href="#Third-Try" class="headerlink" title="Third Try"></a>Third Try</h2><p>好在目前我们可以通过<code>background-clip</code>来处理背景色的延伸范围。<br><figure class="highlight css"><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="selector-tag">border</span>: 30<span class="selector-tag">px</span> <span class="selector-tag">dashed</span> <span class="selector-tag">orange</span>;           </span><br><span class="line"><span class="selector-tag">background-color</span>: <span class="selector-tag">skyblue</span>;</span><br><span class="line"><span class="selector-tag">background-clip</span>: <span class="selector-tag">padding-box</span>;</span><br></pre></td></tr></table></figure></p><p><img src="https://img-blog.csdnimg.cn/20200609232056471.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><h2 id="Finally-Finashed"><a href="#Finally-Finashed" class="headerlink" title="Finally Finashed"></a>Finally Finashed</h2><figure class="highlight css"><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="selector-tag">border</span>: 30<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-tag">hsla</span>(0, 0%, 100%, 0<span class="selector-class">.3</span>); </span><br><span class="line"><span class="selector-tag">background-color</span>: <span class="selector-tag">white</span>;</span><br><span class="line"><span class="selector-tag">background-clip</span>: <span class="selector-tag">padding-box</span>;</span><br></pre></td></tr></table></figure><p><img src="https://img-blog.csdnimg.cn/20200609232537463.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2x1bmh1aTE5OTRf,size_16,color_FFFFFF,t_70" alt="在这里插入图片描述"></p><h2 id="总结"><a href="#总结" class="headerlink" title="总结"></a>总结</h2><ol><li>我们为了实现最终的效果，使用到了<code>background-color</code>， <code>border</code>，<code>background-clip</code> 和 <code>hsla/rgba</code>半透明颜色。</li><li><code>background-clip</code> 定义了背景的延伸范围，默认<code>border-box（从border的外边沿裁切背景）</code>，通过将其值设置为<code>padding-box（从padding外边沿开始裁切背景）</code>避免背景色延伸到边框下。</li><li><code>hsla/rgba</code> 实现了边框的半透明颜色</li></ol><h2 id="最终案例代码"><a href="#最终案例代码" class="headerlink" title="最终案例代码"></a>最终案例代码</h2><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></pre></td><td class="code"><pre><span class="line"><span class="meta">&lt;!DOCTYPE <span class="meta-keyword">html</span>&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">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><br><span class="line"><span class="css">        <span class="selector-class">.box</span>&#123;</span></span><br><span class="line">            display: flex;</span><br><span class="line">            align-items: center;</span><br><span class="line">            justify-content: center;</span><br><span class="line">            width: 400px;</span><br><span class="line">            height: 300px;</span><br><span class="line">            background: #ccc url("http://img.mp.itc.cn/upload/20170621/79ecb57d6e234e7891b6c9da3dfc12f9_th.jpg") no-repeat center;</span><br><span class="line">        &#125;</span><br><span class="line"><span class="css">        <span class="selector-class">.content</span> &#123;</span></span><br><span class="line">            width: 200px;</span><br><span class="line">            height: 150px;</span><br><span class="line">            padding: 20px;</span><br><span class="line"><span class="css">            <span class="selector-tag">border</span>: 30<span class="selector-tag">px</span> <span class="selector-tag">solid</span> <span class="selector-tag">hsla</span>(0, 0%, 100%, 0<span class="selector-class">.3</span>);</span></span><br><span class="line"><span class="css">            <span class="comment">/* border: 30px solid rgba(120, 120, 120, 0.5); */</span></span></span><br><span class="line">            background-color: white;</span><br><span class="line">            background-clip: padding-box;</span><br><span class="line">        &#125;</span><br><span class="line">        p&#123;</span><br><span class="line">            text-align: center;</span><br><span class="line">        &#125;</span><br><span class="line">    <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">"box"</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">"content"</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">p</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">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>]]></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;blockquote&gt;
&lt;p&gt;背景知识：&lt;code&gt;RGBA/HSLA&lt;/code&gt; 半透明颜色， 它们同样是一种颜色，并非只适用于背景。&lt;br&gt;&lt;code&gt;background-clip&lt;/code&gt; 背景裁切属性，定义了背景的延伸范围，是否延伸到&lt;code&gt;边框、内边距盒子、内容盒子，内容文字&lt;/code&gt;下面。分别对应&lt;code&gt;border-box、padding-box、content-box、text&lt;/code&gt;四个属性值&lt;br&gt;
    
    </summary>
    
      <category term="Css" scheme="https://www.zsfmyz.top/categories/Css/"/>
    
    
      <category term="Css" scheme="https://www.zsfmyz.top/tags/Css/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_面试题29. 顺时针打印矩阵（分层 + 递归）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_%E9%9D%A2%E8%AF%95%E9%A2%9829.%20%E9%A1%BA%E6%97%B6%E9%92%88%E6%89%93%E5%8D%B0%E7%9F%A9%E9%98%B5%EF%BC%88%E5%88%86%E5%B1%82%20+%20%E9%80%92%E5%BD%92%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_面试题29. 顺时针打印矩阵（分层 + 递归）/</id>
    <published>2020-06-05T02:11:42.000Z</published>
    <updated>2020-09-24T02:38:13.737Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">示例 1：</span><br><span class="line"></span><br><span class="line">输入：matrix = [[1,2,3],[4,5,6],[7,8,9]]</span><br><span class="line">输出：[1,2,3,6,9,8,7,4,5]</span><br><span class="line">示例 2：</span><br><span class="line"></span><br><span class="line">输入：matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]</span><br><span class="line">输出：[1,2,3,4,8,12,11,10,9,5,6,7]</span><br><span class="line"></span><br><span class="line">限制：</span><br><span class="line"></span><br><span class="line">0 &lt;= matrix.length &lt;= 100</span><br><span class="line">0 &lt;= matrix[i].length &lt;= 100</span><br><span class="line">注意：本题与主站 54 题相同：https://leetcode-cn.com/problems/spiral-matrix/</span><br></pre></td></tr></table></figure><h3 id="解题思路一（分层-递归）"><a href="#解题思路一（分层-递归）" class="headerlink" title="解题思路一（分层+递归）"></a>解题思路一（分层+递归）</h3><ol><li>首先明白题意,题目给出的示例数组是平铺的,不是特别清晰,可能短时间反应不过来它是想干嘛,我们先转换一下.</li></ol><figure class="highlight plain"><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></pre></td><td class="code"><pre><span class="line">[</span><br><span class="line">[1,2,3],</span><br><span class="line">[4,5,6],</span><br><span class="line">[7,8,9]</span><br><span class="line">]</span><br><span class="line">1 -&gt; 2 -&gt; 3 -&gt; 6 -&gt; 9 -&gt; 8 -&gt; 7 -&gt; 4 -&gt; 5</span><br><span class="line"></span><br><span class="line">矩形外围开始,顺时针输出.</span><br></pre></td></tr></table></figure><ol start="2"><li>因为是从外层开始顺时针的,所以我们先看最外层的我们如何得到.<ol><li>首先最外层相当于一个正方形的四条边.(我们将顶点放入上下两条边)</li><li><code>top: [2]</code>, 加入左上和右上两个顶点为<code>[1, 2, 3]</code></li><li><code>right: [6]</code></li><li><code>bottom: [8]</code>, 加入左下和右下两个顶点为 <code>[7, 8, 9]</code></li><li><code>left: [4]</code></li><li>结果<code>[1,2,3,6,9,8,7,4,5]</code> 其中<code>left, bottom</code> 需要反转过来.(因为顺时针)</li></ol></li><li>剥离之后,原来的矩形只剩下了<code>[[5]]</code>, 假若我们矩形是多层的, 那么剩下来的仍然是个矩形,那么我们就可以将剩下的矩阵重新传入, 重复上面第二步求出<code>top right bottom left</code> <h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[][]&#125;</span> <span class="variable">matrix</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number[]&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> spiralOrder = <span class="function"><span class="keyword">function</span>(<span class="params">matrix</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (matrix.length &lt;= <span class="number">1</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> matrix[<span class="number">0</span>] || [];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span> (matrix[<span class="number">0</span>].length &lt;= <span class="number">1</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> matrix.reduce(<span class="function"><span class="keyword">function</span>(<span class="params">sum, item</span>) </span>&#123;</span><br><span class="line">            <span class="keyword">return</span> [...sum, ...item];</span><br><span class="line">        &#125;, [])</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> top = matrix.shift();</span><br><span class="line">    <span class="keyword">let</span> right = [], left = [];</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; matrix.length; i++) &#123;</span><br><span class="line">        right.push(matrix[i].pop());</span><br><span class="line">        left.unshift(matrix[i].shift());</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> bottom = matrix.pop().reverse();</span><br><span class="line">    <span class="keyword">let</span> res = [...top, ...right, ...bottom, ...left];</span><br><span class="line">    <span class="keyword">return</span> res.concat(spiralOrder(matrix));</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pr
      
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_238. 除自身以外数组的乘积（左右乘积列表）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_238.%20%E9%99%A4%E8%87%AA%E8%BA%AB%E4%BB%A5%E5%A4%96%E6%95%B0%E7%BB%84%E7%9A%84%E4%B9%98%E7%A7%AF%EF%BC%88%E5%B7%A6%E5%8F%B3%E4%B9%98%E7%A7%AF%E5%88%97%E8%A1%A8%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_238. 除自身以外数组的乘积（左右乘积列表）/</id>
    <published>2020-06-04T01:47:19.000Z</published>
    <updated>2020-09-24T02:36:29.823Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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><br><span class="line">给你一个长度为 n 的整数数组 nums，其中 n &gt; 1，返回输出数组 output ，其中 output[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">示例:</span><br><span class="line"></span><br><span class="line">输入: [1,2,3,4]</span><br><span class="line">输出: [24,12,8,6]</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">提示：题目数据保证数组之中任意元素的全部前缀元素和后缀（甚至是整个数组）的乘积都在 32 位整数范围内。</span><br><span class="line"></span><br><span class="line">说明: 请不要使用除法，且在 O(n) 时间复杂度内完成此题。</span><br></pre></td></tr></table></figure><h3 id="解题思路一（左右乘积列表）"><a href="#解题思路一（左右乘积列表）" class="headerlink" title="解题思路一（左右乘积列表）"></a>解题思路一（左右乘积列表）</h3><ol><li>如果可以用除法，那我们只需要求出列表乘积，然后除以<code>nums[i]</code>就是所求值了。</li><li>不用除法的情况下，我们需要求得<code>nums[i]</code>的左侧乘积L，和右侧乘积R，然后<code>L*R</code>求得目标值</li><li>那么我们创建两个乘积列表<code>L,R</code>。<code>L[i]</code>代表从<code>nums</code>中从<code>0 ~ i</code>的乘积，<code>R[i]</code>代表<code>nums</code>中从<code>i ~ nums.length - 1</code>的乘积。</li><li>那么我们所求的<code>output[i]</code>就变成了<code>L[I-1] * R[i+1]</code>;<h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">nums</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number[]&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> productExceptSelf = <span class="function"><span class="keyword">function</span>(<span class="params">nums</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (nums.length &lt;= <span class="number">2</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> nums.reverse();</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> L = [nums[<span class="number">0</span>]]</span><br><span class="line">    <span class="keyword">let</span> R = <span class="keyword">new</span> <span class="built_in">Array</span>(nums.length);</span><br><span class="line">    R[nums.length<span class="number">-1</span>] = nums[nums.length<span class="number">-1</span>];</span><br><span class="line">    <span class="keyword">for</span>(<span class="keyword">let</span> i = <span class="number">1</span>, j = nums.length - <span class="number">2</span>; i &lt; nums.length; i++, j--) &#123;</span><br><span class="line">        L[i] = L[i<span class="number">-1</span>] * nums[i];</span><br><span class="line">        R[j] = R[j + <span class="number">1</span>] * nums[j];</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="keyword">let</span> i = <span class="number">1</span>; i &lt; nums.length - <span class="number">1</span>; i++) &#123;</span><br><span class="line">        nums[i] = L[i<span class="number">-1</span>] * R[i + <span class="number">1</span>]; </span><br><span class="line">    &#125;</span><br><span class="line">    nums[<span class="number">0</span>] = R[<span class="number">1</span>];</span><br><span class="line">    nums[nums.length<span class="number">-1</span>] = L[nums.length<span class="number">-2</span>];</span><br><span class="line">    <span class="keyword">return</span> nums;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pr
      
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_1431. 拥有最多糖果的孩子</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_1431.%20%E6%8B%A5%E6%9C%89%E6%9C%80%E5%A4%9A%E7%B3%96%E6%9E%9C%E7%9A%84%E5%AD%A9%E5%AD%90/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_1431. 拥有最多糖果的孩子/</id>
    <published>2020-06-01T03:59:13.000Z</published>
    <updated>2020-09-24T02:33:07.090Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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">给你一个数组 candies 和一个整数 extraCandies ，其中 candies[i] 代表第 i 个孩子拥有的糖果数目。</span><br><span class="line"></span><br><span class="line">对每一个孩子，检查是否存在一种方案，将额外的 extraCandies 个糖果分配给孩子们之后，此孩子有 最多 的糖果。注意，允许有多个孩子同时拥有 最多 的糖果数目。</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">示例 1：</span><br><span class="line"></span><br><span class="line">输入：candies = [2,3,5,1,3], extraCandies = 3</span><br><span class="line">输出：[true,true,true,false,true] </span><br><span class="line">解释：</span><br><span class="line">孩子 1 有 2 个糖果，如果他得到所有额外的糖果（3个），那么他总共有 5 个糖果，他将成为拥有最多糖果的孩子。</span><br><span class="line">孩子 2 有 3 个糖果，如果他得到至少 2 个额外糖果，那么他将成为拥有最多糖果的孩子。</span><br><span class="line">孩子 3 有 5 个糖果，他已经是拥有最多糖果的孩子。</span><br><span class="line">孩子 4 有 1 个糖果，即使他得到所有额外的糖果，他也只有 4 个糖果，无法成为拥有糖果最多的孩子。</span><br><span class="line">孩子 5 有 3 个糖果，如果他得到至少 2 个额外糖果，那么他将成为拥有最多糖果的孩子。</span><br><span class="line">示例 2：</span><br><span class="line"></span><br><span class="line">输入：candies = [4,2,1,1,2], extraCandies = 1</span><br><span class="line">输出：[true,false,false,false,false] </span><br><span class="line">解释：只有 1 个额外糖果，所以不管额外糖果给谁，只有孩子 1 可以成为拥有糖果最多的孩子。</span><br><span class="line">示例 3：</span><br><span class="line"></span><br><span class="line">输入：candies = [12,1,12], extraCandies = 10</span><br><span class="line">输出：[true,false,true]</span><br></pre></td></tr></table></figure><h3 id="解题思路一"><a href="#解题思路一" class="headerlink" title="解题思路一"></a>解题思路一</h3><ol><li>这个题的话，理解好题意，很好回答。</li><li>题意转化后的意思就是，看candies中各项<code>candies[i] + extraCandies</code> 是否是<code>candies</code>中的<code>最大值max</code>。</li><li>那么首先我们先找出来最大值，然后看其他各位加上extraCandies 之后能不能大于或者等于它，可以的话，该i位为true，否则为false。<h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">candies</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">extraCandies</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;boolean[]&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> kidsWithCandies = <span class="function"><span class="keyword">function</span>(<span class="params">candies, extraCandies</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> max = <span class="built_in">Math</span>.max(...candies);</span><br><span class="line">    <span class="keyword">return</span> candies.map(<span class="function"><span class="params">item</span> =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> (item + extraCandies &gt;= max)</span><br><span class="line">    &#125;)</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      
      
        &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pr
      
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_974. 和可被 K 整除的子数组（前序和 + 同余定理）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_974.%20%E5%92%8C%E5%8F%AF%E8%A2%AB%20K%20%E6%95%B4%E9%99%A4%E7%9A%84%E5%AD%90%E6%95%B0%E7%BB%84%EF%BC%88%E5%89%8D%E5%BA%8F%E5%92%8C%20+%20%E5%90%8C%E4%BD%99%E5%AE%9A%E7%90%86%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_974. 和可被 K 整除的子数组（前序和 + 同余定理）/</id>
    <published>2020-05-27T14:59:13.000Z</published>
    <updated>2020-05-28T01:58:49.148Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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">给定一个整数数组 A，返回其中元素之和可被 K 整除的（连续、非空）子数组的数目。</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">示例：</span><br><span class="line"></span><br><span class="line">输入：A = [4,5,0,-2,-3,1], K = 5</span><br><span class="line">输出：7</span><br><span class="line">解释：</span><br><span class="line">有 7 个子数组满足其元素之和可被 K = 5 整除：</span><br><span class="line">[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]</span><br><span class="line"> </span><br><span class="line"></span><br><span class="line">提示：</span><br><span class="line"></span><br><span class="line">1 &lt;= A.length &lt;= 30000</span><br><span class="line">-10000 &lt;= A[i] &lt;= 10000</span><br><span class="line">2 &lt;= K &lt;= 10000</span><br></pre></td></tr></table></figure><a id="more"></a><h3 id="解题思路一-暴力枚举，O（n-3）"><a href="#解题思路一-暴力枚举，O（n-3）" class="headerlink" title="解题思路一(暴力枚举，O（n^3）)"></a>解题思路一(暴力枚举，O（n^3）)</h3><ol><li>暴力枚举所有的前序和，判断<code>对K取模</code>是否为<code>0</code>，为<code>0</code>则结果<code>+1</code><h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">A</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">K</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> subarraysDivByK = <span class="function"><span class="keyword">function</span>(<span class="params">A, K</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> res = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; A.length; i++) &#123;</span><br><span class="line">        <span class="keyword">let</span> prev = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">let</span> j = i; j &gt;= <span class="number">0</span>; j--) &#123;</span><br><span class="line">            prev += A[j];</span><br><span class="line">            <span class="keyword">if</span> (prev % K === <span class="number">0</span>) &#123;</span><br><span class="line">                res++</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol><h3 id="解题思路二-暴力枚举优化-O（n-2）"><a href="#解题思路二-暴力枚举优化-O（n-2）" class="headerlink" title="解题思路二(暴力枚举优化,O（n^2）)"></a>解题思路二(暴力枚举优化,O（n^2）)</h3><ol><li>将两层for循环中的求前序和操作，提前求。</li><li>那么我们求i之前的所有前序和就变成了，求<code>p[i] - p[j]</code> (j的范围是 <code>0 ~ i-1)</code></li><li>判断<code>p[i] - p[j]</code>对K去模是否为0，为0则结果+1<h3 id="代码实现二"><a href="#代码实现二" class="headerlink" title="代码实现二"></a>代码实现二</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">A</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">K</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> subarraysDivByK = <span class="function"><span class="keyword">function</span>(<span class="params">A, K</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> res = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">let</span> p = <span class="keyword">new</span> <span class="built_in">Array</span>(A.length);</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; A.length; i++) &#123;</span><br><span class="line">        p[i] = A.slice(<span class="number">0</span>, i+<span class="number">1</span>).reduce(<span class="function">(<span class="params">sum, item, key, arr</span>) =&gt;</span> &#123;</span><br><span class="line">            <span class="keyword">return</span> sum += item;</span><br><span class="line">        &#125;, <span class="number">0</span>);</span><br><span class="line">        <span class="keyword">for</span>( <span class="keyword">let</span> j = i - <span class="number">1</span>; j &gt;= <span class="number">0</span>; j--) &#123;</span><br><span class="line">            <span class="keyword">if</span>((p[i] - p[j]) % K === <span class="number">0</span>) &#123;</span><br><span class="line">                res++</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(p[i] % K === <span class="number">0</span>) &#123;</span><br><span class="line">            res++</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol><h3 id="解题思路三-同余定理，O（n）"><a href="#解题思路三-同余定理，O（n）" class="headerlink" title="解题思路三(同余定理，O（n）)"></a>解题思路三(同余定理，O（n）)</h3><blockquote><p>先理解一个数学问题，  假设<code>a = 8，b = 13</code>, 同时mod <code>5</code>，那么 <code>a % 5 == 3，b % 5 == 3，即a % 5 ==  b % 5</code>则<code>(b - a) % 5 == 0</code>，<code>即对同一数取模相同的两个值，其差值可整除该数。</code></p><ol><li>将两层for循环中的求前序和操作，提前求前序和序列p。</li><li>得到所有的前序和p之后，理解说明若 <code>p[i] % K  ===  p[j] % K</code> 则<code>p[i] - p[j] % 5 === 0</code>那么<code>j</code>到<code>i</code>就是我们求的一个目标子序列。</li><li>所以我们建立一个<code>hash</code>，用来存储p序列<code>取模之后</code>的值。 <code>hash</code>的键值范围是<code>（0 ~ K -1）</code>因为是对K取余，所以值只可能出现在该范围中。</li><li>由于该hash的标记跟数组下标正好对应，所以hash就声明为一个数组。</li><li>以示例为例<pre><code>1. 输入：`A = [4,5,0,-2,-3,1], K = 5`2. p序列为  `[4, 9, 9, 7, 4, 5]` 取模之后的序列为`[4, 4, 4, 2, 4, 0]` 记录到hash中3. hash = `[1, 0, 1, 0, 4]` 4. 接下来就是排列组合的问题了，将hash列表中 `&gt; 1` 的值进行计算 `n * ( n - 1 ) / 2` 取和5. 最后再加上`hash[0]`的个数，因为`hash[0]`标记的是取模之后为`0`的值的个数，本身就属于目标子序列。</code></pre></li><li>第五步我们是先求出hash表才计算个数，我们也可以在完善hash的同时计算。<ol><li>比如p序列为  <code>[4, 9, 9, 7, 4, 5]</code> 去模的过程中统计。</li><li>计算第<code>1</code>个取模，模值为4，<code>res += hash[4],</code> <code>hash[4]++,</code>由于<code>4</code>是第<code>1</code>次出现所以目前<code>res+=0</code></li><li>计算第<code>2</code>个取模，模值为4，<code>res += hash[4],</code> <code>hash[4]++,</code>由于<code>4</code>是第<code>2</code>次出现所以目前<code>res+=1</code>，子序列下标范围是<code>[0,1]</code></li><li>计算第3个取模，模值为4，<code>res += hash[4],</code> <code>hash[4]++,</code>由于<code>4</code>是第<code>3</code>次出现所以目前<code>res+=2</code>，子序列下标范围是<code>[0,1,2]，[1,2]</code>因为4出现3次，所以第3个4可以和前两个组合。</li><li>依次类推。</li></ol></li></ol></blockquote><h3 id="代码实现三"><a href="#代码实现三" class="headerlink" title="代码实现三"></a>代码实现三</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">A</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">K</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> subarraysDivByK = <span class="function"><span class="keyword">function</span>(<span class="params">A, K</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> hash = <span class="keyword">new</span> <span class="built_in">Array</span>(K).fill(<span class="number">0</span>);</span><br><span class="line">    <span class="keyword">let</span> sum = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">let</span> res = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; A.length; i++) &#123;</span><br><span class="line">        sum += A[i];</span><br><span class="line">        <span class="keyword">let</span> key = sum % K;</span><br><span class="line">        key = key &lt; <span class="number">0</span> ? (key + K) : key; <span class="comment">//处理负数的情况, (3 - (-2)) % 5 === 0</span></span><br><span class="line">        res += hash[key];</span><br><span class="line">        hash[key]++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> res + hash [<span class="number">0</span>];</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    <summary type="html">
    
      &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;17&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;18&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;给定一个整数数组 A，返回其中元素之和可被 K 整除的（连续、非空）子数组的数目。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;示例：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输入：A = [4,5,0,-2,-3,1], K = 5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输出：7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;解释：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;有 7 个子数组满足其元素之和可被 K = 5 整除：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;[4, 5, 0, -2, -3, 1], [5], [5, 0], [5, 0, -2, -3], [0], [0, -2, -3], [-2, -3]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;提示：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;1 &amp;lt;= A.length &amp;lt;= 30000&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;-10000 &amp;lt;= A[i] &amp;lt;= 10000&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2 &amp;lt;= K &amp;lt;= 10000&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_146. LRU缓存机制（vue的keep-Live所使用的缓存机制）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_146.%20LRU%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6%EF%BC%88vue%E7%9A%84keep-live%E6%89%80%E4%BD%BF%E7%94%A8%E7%9A%84%E7%BC%93%E5%AD%98%E6%9C%BA%E5%88%B6%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_146. LRU缓存机制（vue的keep-live所使用的缓存机制）/</id>
    <published>2020-05-26T09:59:13.000Z</published>
    <updated>2020-05-28T01:59:39.936Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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">运用你所掌握的数据结构，设计和实现一个  LRU (最近最少使用) 缓存机制。它应该支持以下操作： 获取数据 get 和 写入数据 put 。</span><br><span class="line"></span><br><span class="line">获取数据 get(key) - 如果关键字 (key) 存在于缓存中，则获取关键字的值（总是正数），否则返回 -1。</span><br><span class="line">写入数据 put(key, value) - 如果关键字已经存在，则变更其数据值；如果关键字不存在，则插入该组「关键字/值」。当缓存容量达到上限时，它应该在写入新数据之前删除最久未使用的数据值，从而为新的数据值留出空间。</span><br><span class="line"></span><br><span class="line"> </span><br><span class="line">进阶:</span><br><span class="line"></span><br><span class="line">你是否可以在 O(1) 时间复杂度内完成这两种操作？</span><br></pre></td></tr></table></figure><a id="more"></a><h3 id="解题思路一"><a href="#解题思路一" class="headerlink" title="解题思路一"></a>解题思路一</h3><ol><li><a href="https://baike.baidu.com/item/LRU" target="_blank" rel="noopener">LRU缓存机制</a>，可以自行百度一下。<ol><li>特点1，hash表读取数据</li><li>特点2，存在一个<code>keys</code>序列，代表缓存的所有<code>key</code>，顺序按照最近的<code>活跃度</code>来排序，比如你<code>刚刚</code>用过<code>key为1</code> 的值，那么<code>1</code>就会排在<code>keys序列</code>的第<code>一</code>位。当缓存<code>超出</code>的时候，会优先<code>删除keys</code>的<code>末尾</code>。</li></ol></li><li>所以我们主要维护了一个hash，js中就是一个对象，用来存数据。一个序列也就是一个数组存keys。</li><li>get：如果将get的key，位置置换到首位。并返回数据。</li><li>put：将put设置的值的key，放在keys序列首位，判断是否超出，超出则删除最后一位。<h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">capacity</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"><span class="keyword">var</span> LRUCache = <span class="function"><span class="keyword">function</span>(<span class="params">capacity</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">this</span>.obj = &#123;&#125;;</span><br><span class="line">    <span class="keyword">this</span>.objKeys = [];</span><br><span class="line">    <span class="keyword">this</span>.limit = capacity;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="comment">/** </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">key</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line">LRUCache.prototype.get = <span class="function"><span class="keyword">function</span>(<span class="params">key</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (<span class="keyword">this</span>.obj[key]) &#123;</span><br><span class="line">        <span class="keyword">this</span>.objKeys.splice(<span class="keyword">this</span>.objKeys.indexOf(key), <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">this</span>.objKeys.unshift(key);</span><br><span class="line">        <span class="keyword">return</span> <span class="keyword">this</span>.obj[key];</span><br><span class="line">    &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="number">-1</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">/** </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> </span>key </span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number&#125;</span> <span class="variable">value</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;void&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line">LRUCache.prototype.put = <span class="function"><span class="keyword">function</span>(<span class="params">key, value</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">this</span>.obj[key] &amp;&amp; <span class="keyword">this</span>.objKeys.splice(<span class="keyword">this</span>.objKeys.indexOf(key), <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">this</span>.objKeys.unshift(key);</span><br><span class="line">    <span class="keyword">this</span>.obj[key] = value;</span><br><span class="line">    <span class="keyword">if</span> (<span class="keyword">this</span>.objKeys.length &gt; <span class="keyword">this</span>.limit) &#123;</span><br><span class="line">        <span class="keyword">delete</span> <span class="keyword">this</span>.obj[<span class="keyword">this</span>.objKeys[<span class="keyword">this</span>.limit]];</span><br><span class="line">        <span class="keyword">this</span>.objKeys.length -= <span class="number">1</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">/**</span></span><br><span class="line"><span class="comment"> * Your LRUCache object will be instantiated and called as such:</span></span><br><span class="line"><span class="comment"> * var obj = new LRUCache(capacity)</span></span><br><span class="line"><span class="comment"> * var param_1 = obj.get(key)</span></span><br><span class="line"><span class="comment"> * obj.put(key,value)</span></span><br><span class="line"><span class="comment"> */</span></span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;运用你所掌握的数据结构，设计和实现一个  LRU (最近最少使用) 缓存机制。它应该支持以下操作： 获取数据 get 和 写入数据 put 。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;获取数据 get(key) - 如果关键字 (key) 存在于缓存中，则获取关键字的值（总是正数），否则返回 -1。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;写入数据 put(key, value) - 如果关键字已经存在，则变更其数据值；如果关键字不存在，则插入该组「关键字/值」。当缓存容量达到上限时，它应该在写入新数据之前删除最久未使用的数据值，从而为新的数据值留出空间。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt; &lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;进阶:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;你是否可以在 O(1) 时间复杂度内完成这两种操作？&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_287. 寻找重复数（二分法）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_287.%20%E5%AF%BB%E6%89%BE%E9%87%8D%E5%A4%8D%E6%95%B0%EF%BC%88%E4%BA%8C%E5%88%86%E6%B3%95%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_287. 寻找重复数（二分法）/</id>
    <published>2020-05-26T09:59:13.000Z</published>
    <updated>2020-05-28T01:59:10.200Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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">给定一个包含 n + 1 个整数的数组 nums，其数字都在 1 到 n 之间（包括 1 和 n），可知至少存在一个重复的整数。假设只有一个重复的整数，找出这个重复的数。</span><br><span class="line"></span><br><span class="line">示例 1:</span><br><span class="line"></span><br><span class="line">输入: [1,3,4,2,2]</span><br><span class="line">输出: 2</span><br><span class="line">示例 2:</span><br><span class="line"></span><br><span class="line">输入: [3,1,3,4,2]</span><br><span class="line">输出: 3</span><br><span class="line">说明：</span><br><span class="line"></span><br><span class="line">不能更改原数组（假设数组是只读的）。</span><br><span class="line">只能使用额外的 O(1) 的空间。</span><br><span class="line">时间复杂度小于 O(n2) 。</span><br><span class="line">数组中只有一个重复的数字，但它可能不止重复出现一次。</span><br></pre></td></tr></table></figure><a id="more"></a><h3 id="解题思路一"><a href="#解题思路一" class="headerlink" title="解题思路一"></a>解题思路一</h3><ol><li>先放一种前端比较好理解的。</li><li>indexOf会返回数组中该元素出现的第一次的位置</li><li>我们利用这个特性，当indexOf的值跟目前的index不一致时，说明之前出现过一次。返回即可<h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">nums</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> findDuplicate = <span class="function"><span class="keyword">function</span>(<span class="params">nums</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> res = <span class="number">0</span>;</span><br><span class="line">    nums.map(<span class="function">(<span class="params">item, key, arr</span>) =&gt;</span> &#123;</span><br><span class="line">        <span class="keyword">if</span> (arr.indexOf(item) !== key) &#123;</span><br><span class="line">            res = item;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;);</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol><h3 id="解题思路二（二分法）"><a href="#解题思路二（二分法）" class="headerlink" title="解题思路二（二分法）"></a>解题思路二（二分法）</h3><ol><li>首先看题意：数字范围为<code>1 ~ n</code>，那其实就是在<code>1~n</code>的范围内找到哪个元素在<code>nums</code>中<code>重复存在</code>。</li><li>so，<code>1 ~ n</code>的序列。是<code>有序</code>的，可以用二分找了，以<code>1~n</code>为基础，以<code>nums</code>为条件判断的元素。</li><li>那怎么找呢。比如我们找到中间节点<code>mid</code>，判断<code>nums</code>数组中比<code>mid小</code>的有多少个<code>（prev）</code>，<ol><li>按正常来讲比如<code>mid为3</code>，那么从<code>1到n &lt;= 3</code>的数量应就是<code>[1,2,3]</code>,一共是<code>3</code>个啦。</li><li>所以如果重复的元素<code>比3小</code>的话，那么<code>3</code>的<code>prev</code>就变成<code>4以上</code>了，因为[1,2,3]就变成了<code>[1,1,2,3]</code>或者<code>[1,2,2,3]</code>,等等，</li><li>所以我们就可以通过<code>prev</code>的大小来锁定重复元素的范围是在<code>1 ~ mid</code>还是在<code>mid+1 ~ n</code>；</li></ol></li><li>接下来就很简单了。就是一个二分法了。<h3 id="代码实现一-1"><a href="#代码实现一-1" class="headerlink" title="代码实现一"></a>代码实现一</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">nums</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;number&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> findDuplicate = <span class="function"><span class="keyword">function</span>(<span class="params">nums</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">let</span> res = <span class="literal">null</span>;</span><br><span class="line">    <span class="function"><span class="keyword">function</span> <span class="title">find</span>(<span class="params">start, end, nums</span>) </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (end == start) &#123; <span class="comment">//找到最终目标了</span></span><br><span class="line">           <span class="keyword">return</span> <span class="keyword">void</span> ( res = end );</span><br><span class="line">        &#125; </span><br><span class="line">        </span><br><span class="line">        <span class="keyword">let</span> mid = start + ((end - start) &gt;&gt; <span class="number">1</span>);</span><br><span class="line">        <span class="keyword">let</span> prev = <span class="number">0</span>;</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">for</span> (<span class="keyword">let</span> i = <span class="number">0</span>; i &lt; nums.length; i++) &#123;</span><br><span class="line">            <span class="keyword">if</span> (nums[i] &lt;= mid) &#123;</span><br><span class="line">                prev++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        </span><br><span class="line">        <span class="keyword">if</span> (prev &gt; mid) &#123;</span><br><span class="line">            find(start, mid, nums)</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            find(mid + <span class="number">1</span>, end, nums)</span><br><span class="line">        &#125;</span><br><span class="line">        </span><br><span class="line">    &#125;</span><br><span class="line">    find(<span class="number">1</span>, nums.length - <span class="number">1</span>, nums);</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;给定一个包含 n + 1 个整数的数组 nums，其数字都在 1 到 n 之间（包括 1 和 n），可知至少存在一个重复的整数。假设只有一个重复的整数，找出这个重复的数。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;示例 1:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输入: [1,3,4,2,2]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输出: 2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;示例 2:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输入: [3,1,3,4,2]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;输出: 3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;说明：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;不能更改原数组（假设数组是只读的）。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;只能使用额外的 O(1) 的空间。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;时间复杂度小于 O(n2) 。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;数组中只有一个重复的数字，但它可能不止重复出现一次。&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
  <entry>
    <title>JavaScript：leetcode_105. 从前序与中序遍历序列构造二叉树（前序找根，中序分左右，递归）</title>
    <link href="https://www.zsfmyz.top/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/JavaScript%EF%BC%9Aleetcode_105.%20%E4%BB%8E%E5%89%8D%E5%BA%8F%E4%B8%8E%E4%B8%AD%E5%BA%8F%E9%81%8D%E5%8E%86%E5%BA%8F%E5%88%97%E6%9E%84%E9%80%A0%E4%BA%8C%E5%8F%89%E6%A0%91%EF%BC%88%E5%89%8D%E5%BA%8F%E6%89%BE%E6%A0%B9%EF%BC%8C%E4%B8%AD%E5%BA%8F%E5%88%86%E5%B7%A6%E5%8F%B3%EF%BC%8C%E9%80%92%E5%BD%92%EF%BC%89/"/>
    <id>https://www.zsfmyz.top/Algorithm/每日一题/JavaScript：leetcode_105. 从前序与中序遍历序列构造二叉树（前序找根，中序分左右，递归）/</id>
    <published>2020-05-22T09:59:13.000Z</published>
    <updated>2020-05-28T01:59:50.414Z</updated>
    
    <content type="html"><![CDATA[<h3 id="题目说明"><a href="#题目说明" class="headerlink" title="题目说明"></a>题目说明</h3><figure class="highlight plain"><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><br><span class="line"></span><br><span class="line">注意:</span><br><span class="line">你可以假设树中没有重复的元素。</span><br><span class="line"></span><br><span class="line">例如，给出</span><br><span class="line"></span><br><span class="line">前序遍历 preorder = [3,9,20,15,7]</span><br><span class="line">中序遍历 inorder = [9,3,15,20,7]</span><br><span class="line">返回如下的二叉树：</span><br><span class="line"></span><br><span class="line">    3</span><br><span class="line">   / \</span><br><span class="line">  9  20</span><br><span class="line">    /  \</span><br><span class="line">   15   7</span><br></pre></td></tr></table></figure><a id="more"></a><h3 id="解题思路一"><a href="#解题思路一" class="headerlink" title="解题思路一"></a>解题思路一</h3><ol><li><code>前序找根</code>，<code>中序分左右</code>，<code>递归</code>即可。</li><li>根为前序第一个值。<code>let root = new TreeNode(preorder[0]);</code></li><li>找到根在中序中的位置<code>let rootIndex = inorder.indexOf(root.val);</code></li><li><p>左右分开。left为左中序，right为右中序，preLeft为左前序，preRight为右</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> left = inorder.slice(<span class="number">0</span>, rootIndex);</span><br><span class="line"> <span class="keyword">let</span> right = inorder.slice(rootIndex + <span class="number">1</span>, inorder.length);</span><br><span class="line"> <span class="keyword">let</span> preLeft = preorder.slice(<span class="number">1</span>, left.length + <span class="number">1</span>);</span><br><span class="line"> <span class="keyword">let</span> preRight = preorder.slice(left.length + <span class="number">1</span>);</span><br></pre></td></tr></table></figure></li><li><p>找到左右各自的前中序列。即可递归找根了。</p><h3 id="代码实现一"><a href="#代码实现一" class="headerlink" title="代码实现一"></a>代码实现一</h3><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></pre></td><td class="code"><pre><span class="line"><span class="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for a binary tree node.</span></span><br><span class="line"><span class="comment"> * function TreeNode(val) &#123;</span></span><br><span class="line"><span class="comment"> *     this.val = val;</span></span><br><span class="line"><span class="comment"> *     this.left = this.right = null;</span></span><br><span class="line"><span class="comment"> * &#125;</span></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="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">preorder</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@param <span class="type">&#123;number[]&#125;</span> <span class="variable">inorder</span></span></span></span><br><span class="line"><span class="comment"> * <span class="doctag">@return <span class="type">&#123;TreeNode&#125;</span></span></span></span><br><span class="line"><span class="comment"> */</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">var</span> buildTree = <span class="function"><span class="keyword">function</span> <span class="title">buildTree</span>(<span class="params">preorder, inorder</span>) </span>&#123;</span><br><span class="line">    <span class="keyword">if</span> (preorder.length == <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="literal">null</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> root = <span class="keyword">new</span> TreeNode(preorder[<span class="number">0</span>]);</span><br><span class="line">    <span class="keyword">if</span> (preorder.length == <span class="number">1</span>) &#123;</span><br><span class="line">        <span class="keyword">return</span> root;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">let</span> rootIndex = inorder.indexOf(root.val);</span><br><span class="line">    <span class="keyword">let</span> left = inorder.slice(<span class="number">0</span>, rootIndex);</span><br><span class="line">    <span class="keyword">let</span> right = inorder.slice(rootIndex + <span class="number">1</span>, inorder.length);</span><br><span class="line">    <span class="keyword">let</span> preLeft = preorder.slice(<span class="number">1</span>, left.length + <span class="number">1</span>);</span><br><span class="line">    <span class="keyword">let</span> preRight = preorder.slice(left.length + <span class="number">1</span>);</span><br><span class="line">    left.length &amp;&amp; (root.left = buildTree(preLeft, left));</span><br><span class="line">    right.length &amp;&amp; (root.right = buildTree(preRight, right));</span><br><span class="line">    <span class="keyword">return</span> root;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></li></ol>]]></content>
    
    <summary type="html">
    
      &lt;h3 id=&quot;题目说明&quot;&gt;&lt;a href=&quot;#题目说明&quot; class=&quot;headerlink&quot; title=&quot;题目说明&quot;&gt;&lt;/a&gt;题目说明&lt;/h3&gt;&lt;figure class=&quot;highlight plain&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;2&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;4&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;5&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;6&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;7&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;8&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;9&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;10&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;11&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;12&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;13&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;14&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;15&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;16&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;根据一棵树的前序遍历与中序遍历构造二叉树。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;注意:&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;你可以假设树中没有重复的元素。&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;例如，给出&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;前序遍历 preorder = [3,9,20,15,7]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;中序遍历 inorder = [9,3,15,20,7]&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;返回如下的二叉树：&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    3&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   / \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;  9  20&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;    /  \&lt;/span&gt;&lt;br&gt;&lt;span class=&quot;line&quot;&gt;   15   7&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;
    
    </summary>
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/categories/Algorithm/"/>
    
      <category term="每日一题" scheme="https://www.zsfmyz.top/categories/Algorithm/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98/"/>
    
    
      <category term="Algorithm" scheme="https://www.zsfmyz.top/tags/Algorithm/"/>
    
  </entry>
  
</feed>
