<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>MagicBlog</title>
  
  
  <link href="https://magic.thisis.host/atom.xml" rel="self"/>
  
  <link href="https://magic.thisis.host/"/>
  <updated>2024-09-08T02:14:09.000Z</updated>
  <id>https://magic.thisis.host/</id>
  
  <author>
    <name>Magic</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>js之原型</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0830/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0830/</id>
    <published>2024-09-07T11:51:58.000Z</published>
    <updated>2024-09-08T02:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、编程思想"><a href="#一、编程思想" class="headerlink" title="一、编程思想"></a>一、编程思想</h1><h2 id="1-面向过程编程"><a href="#1-面向过程编程" class="headerlink" title="1.面向过程编程"></a>1.面向过程编程</h2><p>面向过程就是分析出解决问题所需要的步骤，然后用函数把这些步骤一步一步实现，使用的时候再一个一个的依次<br>调用就可以了<br>优点：性能好<br>缺点：不灵活，复用性低</p><h2 id="2-面向对象编程"><a href="#2-面向对象编程" class="headerlink" title="2.面向对象编程"></a>2.面向对象编程</h2><p>面向对象是把事务分解成为一个个对象：然后由对象之间分工与合作。</p><ol><li>每一个对象都是功能中心，具有明确分工</li><li>面向对象编程具有灵活、代码可复用、容易维护和开发的优点，更适合多人合作的大型软件项目。</li><li>面向对象的特性：封装性,继承性,多态性</li></ol><h1 id="二、构造函数"><a href="#二、构造函数" class="headerlink" title="二、构造函数"></a>二、构造函数</h1><p>封装是面向对象思想中比较重要的一部分，jS面向对象可以通过构造函数实现的封装。<br>同样的将变量和函数组合到了一起并能通过thS实现数据的共享，所不同的是借助构造函数创建出来的实例对象之<br>间是彼此不影响的</p><p><strong>总结：</strong></p><ol><li>构造函数体现了面向对象的封装特性</li><li>构造函数实例创建的对象彼此独立、互不影响</li><li>但是可能存在浪费内存的问题</li></ol><h1 id="三、原型"><a href="#三、原型" class="headerlink" title="三、原型"></a>三、原型</h1><h2 id="1-原型"><a href="#1-原型" class="headerlink" title="1. 原型"></a>1. 原型</h2><p>JavaScript规定，每一个构造函数都有一个prototype属性，指向另一个对象，所以我们也称为原型对象<br>对象实例化不会多次创建原型上函数，节约内存</p><ol><li>我们可以把那些不变的方法，直接定义在prototype对象上，这样所有对象的实例就可以共享这些方法。</li><li>构造函数和原型对象中的this都指向实例化的对象<br>const arr&#x3D;[1,2,3]<br>Array.prototype.max&#x3D;function(){<br> return Math.max(…this)<br> &#x2F;&#x2F;原型函数里面的this指向谁？实例对象<br>}<br>console.log(arr.max())</li></ol><h2 id="2-constructor属性"><a href="#2-constructor属性" class="headerlink" title="2.constructor属性"></a>2.constructor属性</h2><p>每个原型对象里面都有个constructor属性<br><strong>作用：</strong><br>该属性指向该原型对象的构造函数，简单理解，就是指向我的爸爸，我是有爸爸的孩子<br><strong>使用场景：</strong><br>如果有多个对象的方法，我们可以给原型对象采取对象形式赋值<br>但是这样就会覆盖构造函数原型对象原来的内容，这样修改后的原型对象constructor就不再指向当前构造函数了<br>此时，我们可以在修改后的原型对象中，添加一个constructor指向原来的构造函数。</p><h2 id="3-对象原型"><a href="#3-对象原型" class="headerlink" title="3.对象原型"></a>3.对象原型</h2><p>对象都会有一个属性_proto指向构造函数的prototype原型对象，之所以我们对象可以使用构造函数prototype<br>原型对象的属性和方法，就是因为对象有_proto_原型的存在。</p><p><strong>注意：</strong><br>_proto_是JS非标准属性<br>[[prototype]]和_proto_意义相同<br>用来表明当前实例对象指向哪个原型对象prototype<br>_proto_对象原型里面也有一个constructor属性，指向创建该实例对象的构造函数 </p><h2 id="4-原型继承"><a href="#4-原型继承" class="headerlink" title="4.原型继承"></a>4.原型继承</h2><p>继承是面向对象编程的另一个特征，通过继承进一步提升代码封装的程度，JavaScript中大多是借助原型对象实现继承<br>的特性</p><p><strong>核心：</strong>抽取公共部分为构造函数，子类的原型继承new父类</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">Person</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">eyes</span>=<span class="number">2</span></span><br><span class="line">    <span class="variable language_">this</span>.<span class="property">head</span>=<span class="number">1</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">function</span> <span class="title function_">Woman</span>(<span class="params"></span>)&#123;</span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//Woman通过原型来继承Person</span></span><br><span class="line"><span class="title class_">Woman</span>.<span class="property"><span class="keyword">prototype</span></span>=<span class="keyword">new</span> <span class="title class_">Person</span>()</span><br><span class="line"><span class="comment">//指回原来的构造函数</span></span><br><span class="line"><span class="title class_">Woman</span>.<span class="property"><span class="keyword">prototype</span></span>.<span class="property">constructor</span>=<span class="title class_">Woman</span>!</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="5-原型链"><a href="#5-原型链" class="headerlink" title="5.原型链"></a>5.原型链</h2><p>基于原型对象的继承使得不同构造函数的原型对象关联在一起，并且这种关联的关系是一种链状的结构，我们将原型对<br>象的链状结构关系称为原型链</p><p><strong>查找规则</strong></p><ol><li>当访问一个对象的属性（包括方法）时，首先查找这个对象自身有没有该属性。</li><li>如果没有就查找它的原型(也就是proto指向的prototype原型对象)</li><li>如果还没有就查找原型对象的原型（Object的原型对象)</li><li>依此类推一直找到Object为止(null)</li><li>_proto_对象原型的意义就在于为对象成员查找机制提供一个方向，或者说一条路线</li><li>可以使用instanceof运算符用于检测构造函数的prototype属性是否出现在某个实例对象的原型链上<br>Array instanceof Object(true)数组属于对象</li></ol>]]></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;h2 id=&quot;1-面向过程编程&quot;&gt;&lt;a href=&quot;#1-面向过程编程&quot; class=&quot;headerlink&quot; </summary>
      
    
    
    
    <category term="js" scheme="https://magic.thisis.host/categories/js/"/>
    
    
    <category term="js" scheme="https://magic.thisis.host/tags/js/"/>
    
  </entry>
  
  <entry>
    <title>js进阶之作用域、函数进阶以及解构赋值</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0813/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0813/</id>
    <published>2024-08-13T09:51:58.000Z</published>
    <updated>2024-08-14T03:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、作用域"><a href="#一、作用域" class="headerlink" title="一、作用域"></a>一、作用域</h1><h2 id="1-局部作用域"><a href="#1-局部作用域" class="headerlink" title="1.局部作用域"></a>1.局部作用域</h2><p>分为函数作用域和块作用域</p><p><strong>函数作用域</strong>：(在函数内部声明的变量只能在函数内部被访问，外部无法直接访问)</p><ol><li>函数内部声明的变量，在函数外部无法被访问</li><li>函数的参数也是函数内部的局部变量</li><li>不同函数内部声明的变量无法互相访问</li><li>函数执行完毕后，函数内部的变量实际被清空了</li></ol><p><strong>块作用域</strong>：(在javaScript中使用{}包裹的代码称为代码块，代码块内部声明的变量外部将[有可能]无法被访问)</p><ol><li>let声明的变量会产生块作用域，var不会产生块作用域</li><li>const声明的常量也会产生块作用域</li><li>不同代码块之间的变量无法互相访问</li><li>推荐使用let或const</li></ol><h2 id="2-全局作用域-标签和js文件的-最外层-就是所谓的全局作用域"><a href="#2-全局作用域-标签和js文件的-最外层-就是所谓的全局作用域" class="headerlink" title="2.全局作用域 标签和js文件的[最外层]就是所谓的全局作用域"></a>2.全局作用域 <script>标签和js文件的[最外层]就是所谓的全局作用域</h2><p><strong>注意：</strong></p><ol><li>为window对象动态添加的属性默认也是全局的，不推荐</li><li>函数中未使用任何关键字声明的变量为全局变量，不推荐</li><li>尽可能少的声明全局变量，防止全局变量被污染</li></ol><h2 id="3-作用域链"><a href="#3-作用域链" class="headerlink" title="3.作用域链"></a>3.作用域链</h2><p>作用域链本质上是底层的变量查找机制<br>在函数被执行时，会优先查找当前函数作用域中查找变量<br>如果当前作用域查找不到则会依次逐级查找父级作用域直到全局作用域 </p><p><strong>总结：</strong></p><ol><li>嵌套关系的作用域串联起来形成了作用域链</li><li>相同作用域链中按着从小到大的规则查找变量</li><li>子作用域能够访问父作用域，父级作用域无法访问子级作用域</li></ol><h2 id="4-js垃圾回收机制-Garbage-Collection-简称GC"><a href="#4-js垃圾回收机制-Garbage-Collection-简称GC" class="headerlink" title="4.js垃圾回收机制(Garbage Collection)简称GC"></a>4.js垃圾回收机制(Garbage Collection)简称GC</h2><p>js中内存的分配和回收都是自动完成的，内存在不使用的时候会被垃圾回收器自动回收<br>内存的<strong>生命周期</strong>：</p><ol><li>内存分配：当我们声明变量、函数、对象的时候，系统会自动为他们分配内存</li><li>内存使用：即读写内存，也就是使用变量、函数等</li><li>内存回收：使用完毕，由垃圾回收器自动回收不再使用的内存</li></ol><p><em>说明：</em><br>全局变量一般不会回收（关闭页面回收）<br>一般情况下局部变量的值，不用了，会被自动回收掉<br><em>内存泄漏：</em><br>程序中分配的内存由于某种原因程序未释放或无法释放叫做内存泄漏</p><p>浏览器垃圾回收算法：<strong>引用计数法、标记清除法</strong></p><h3 id="引用计数法"><a href="#引用计数法" class="headerlink" title="引用计数法"></a>引用计数法</h3><p>IE采用的引用计数算法，定义“内存不再使用”，就是看一个对象是否有指向它的引用，没有引用了就回收对象</p><p><strong>算法：</strong></p><ol><li>跟踪记录被引用的次数</li><li>如果被引用了一次，那么就记录次数1，多次引用会累加++</li><li>如果减少一个引用就减1-</li><li>如果引用次数是0，则释放内存</li></ol><p><em>存在问题</em>：嵌套引用（循环引用）<br>如果两个对象相互引用，尽管他们已不再使用，垃圾回收器不会进行回收，导致内存泄露。</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"></span>)&#123;</span><br><span class="line">1et o1=&#123;&#125;</span><br><span class="line"><span class="keyword">let</span> o2 =&#123;&#125;</span><br><span class="line">o1.<span class="property">a</span>=<span class="number">02</span></span><br><span class="line">o2.<span class="property">a</span>=<span class="number">01</span></span><br><span class="line"><span class="keyword">return</span><span class="string">&#x27;引用计数无法回收&#x27;</span></span><br><span class="line">&#125;<span class="title function_">fn</span>()</span><br></pre></td></tr></table></figure><p>因为他们的引用次数永远不会是0。这样的相互引用如果说很大量的存在就会导致大量的内存泄露</p><h3 id="标记清除法"><a href="#标记清除法" class="headerlink" title="标记清除法"></a>标记清除法</h3><p><strong>核心：</strong></p><ol><li>标记清除算法将“不再使用的对象”定义为“无法达到的对象”。</li><li>就是从根部(在js中就是全局对象)出发定时扫描内存中的对象。凡是能从根部到达的对象，都是还需要使用的。</li><li>那些无法由根部出发触及到的对象被标记为不再使用，稍后进行回收。</li></ol><h2 id="5-闭包"><a href="#5-闭包" class="headerlink" title="5.闭包"></a>5.闭包</h2><p>闭包=内层函数+外层函数的变量<br>作用：封闭数据，提供操作，外部也可以访问函数内部的变量<br>基本格式：</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">outer</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="keyword">let</span> a=<span class="number">10</span><span class="comment">//实现了数据私有，不能随意更改</span></span><br><span class="line">    <span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"></span>)&#123;</span><br><span class="line">        <span class="variable language_">console</span>.<span class="title function_">log</span>(a)</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> fn</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">const</span> fun=<span class="title function_">outer</span>()</span><br><span class="line"><span class="title function_">fun</span>()</span><br></pre></td></tr></table></figure><p>可能引起问题：内存泄漏</p><h2 id="6-变量提升"><a href="#6-变量提升" class="headerlink" title="6.变量提升"></a>6.变量提升</h2><p>变量提升是js中比较“奇怪”的现象，它允许在变量声明之前即被访问（仅存在于var声明变量）<br>把所有var声明的变量提升到当前作用域的最前面，只提升声明，不提升赋值</p><h1 id="二、函数进阶"><a href="#二、函数进阶" class="headerlink" title="二、函数进阶"></a>二、函数进阶</h1><h2 id="1-函数提升"><a href="#1-函数提升" class="headerlink" title="1.函数提升"></a>1.函数提升</h2><p>js会把所有函数声明提升到当前作用域的最前面，只提升函数声明，不提升函数调用<br>注意：函数表达式必须先声明赋值再调用，否则报错</p><h2 id="2-函数参数"><a href="#2-函数参数" class="headerlink" title="2.函数参数"></a>2.函数参数</h2><h3 id="动态参数arguments："><a href="#动态参数arguments：" class="headerlink" title="动态参数arguments："></a>动态参数arguments：</h3><p>函数内部内置的伪数组变量，它包含了调用函数时传入的所有实参</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment">//求和函数，计算所有参数的和</span></span><br><span class="line"><span class="keyword">function</span> <span class="title function_">sum</span>(<span class="params"></span>)&#123;</span><br><span class="line"><span class="keyword">let</span> s =<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;<span class="variable language_">arguments</span>.<span class="property">length</span>;i++)&#123;</span><br><span class="line">s +=<span class="variable language_">arguments</span>[i]</span><br><span class="line">&#125;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(s)</span><br><span class="line"><span class="comment">//调用求和函数</span></span><br><span class="line"><span class="title function_">sum</span>(<span class="number">5</span>,<span class="number">10</span>)<span class="comment">//两个参数</span></span><br><span class="line"><span class="title function_">sum</span>(<span class="number">1</span>,<span class="number">2</span>,<span class="number">4</span>)/两个参数</span><br></pre></td></tr></table></figure><p><strong>总结：</strong></p><ol><li>arguments是一个伪数组，只存在于函数中</li><li>arguments的作用是动态获取函数的实参</li><li>可以通过fo循环依次得到传递过来的实参</li></ol><h3 id="剩余参数-用于获取多余实参-在函数参数中使用"><a href="#剩余参数-用于获取多余实参-在函数参数中使用" class="headerlink" title="剩余参数:用于获取多余实参,在函数参数中使用"></a>剩余参数:用于获取多余实参,在函数参数中使用</h3><p>将一个不定数量的参数表示为一个数组</p><ol><li>...是语法符号，置于最末函数形参之前，用于获取多余的实参</li><li>借助...获取的剩余实参，是个真数组<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></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">config</span>(<span class="params">baseURL,...other</span>)&#123;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(baseURL)</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(other)<span class="comment">//[&#x27;get&#x27;,&#x27;json&#x27;]</span></span><br><span class="line"><span class="comment">//调用函数</span></span><br><span class="line"><span class="title function_">config</span>(<span class="string">&#x27;http://baidu.com&#x27;</span>,<span class="string">&#x27;get&#x27;</span>,<span class="string">&#x27;json&#x27;</span>);</span><br><span class="line"><span class="comment">//展开运算符:...可以展开数组</span></span><br><span class="line"><span class="comment">//求数组最大（小）值Math.max(...arr)</span></span><br><span class="line"><span class="comment">//合并数组arr=[...arr1,...arr2]</span></span><br></pre></td></tr></table></figure></li></ol><h2 id="3-箭头函数"><a href="#3-箭头函数" class="headerlink" title="3.箭头函数"></a>3.箭头函数</h2><ol><li>const fn=(形参)=>{}箭头函数 const fn=function(){}原来<br>目的：引入箭头函数的目的是更简短的函数写法并且不绑定this,箭头函数的语法比函数表达式更简洁<br>使用场景：箭头函数更适用于那些本来需要匿名函数的地方<br>属于表达式函数，因此不存在函数提升</li></ol><p><strong>只有一个形参可以省略小括号，只有一行代码时可以省略大括号和return</strong></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></pre></td><td class="code"><pre><span class="line"><span class="comment">//更简洁的语法</span></span><br><span class="line"><span class="keyword">const</span> form <span class="variable language_">document</span>.<span class="title function_">queryselector</span>(<span class="string">&#x27;form&#x27;</span>)</span><br><span class="line">form.<span class="title function_">addEventListener</span>(<span class="string">&#x27;click&#x27;</span>,<span class="function"><span class="params">ev</span> =&gt;</span>ev.<span class="title function_">preventDefault</span>())</span><br></pre></td></tr></table></figure><p><strong>箭头函数可以直接返回一个对象</strong><br>const fn=(uname)=>({uname:uname})//返回的是对象<br>fn('刘德华')<br>2. 箭头函数参数<br>普通函数有arguments动态参数<br>箭头函数没有arguments动态参数，但是有剩余参数...arr<br>3. 箭头函数this<br>箭头函数不会创建自己的thiS,它只会从自己的作用域链的上一层沿用this。<br>对象方法的箭头函数this指向window<br>对象方法<strong>内</strong>的箭头函数this指向对象本身</p><h1 id="三、解构赋值"><a href="#三、解构赋值" class="headerlink" title="三、解构赋值"></a>三、解构赋值</h1><h2 id="1-数组解构：将数组的单元值快速批量赋值给一系列变量的简洁语法"><a href="#1-数组解构：将数组的单元值快速批量赋值给一系列变量的简洁语法" class="headerlink" title="1.数组解构：将数组的单元值快速批量赋值给一系列变量的简洁语法"></a>1.数组解构：将数组的单元值快速批量赋值给一系列变量的简洁语法</h2><p>基本语法：</p><ol><li>赋值运算符=左侧的[]用于批量声明变量，右侧数组的单元值将被赋值给左侧的变量</li><li>变量的顺序对应数组单元值的位置依次进行赋值操作<br>;[b,a]=[a,b]快速交换两个变量<br><strong>注意：</strong><br>立即执行函数和数组解构必须加;</li><li>变量多单元值少，后面为undefined</li><li>变量少单元值多，利用剩余参数解决<br>const [a,b,...c]=[1,2,3,4]</li><li>防止有undefined传递单元值可以设置默认值</li><li>按需导入可以忽略某些值<br>const [a,b，,d]=[1,2,3,4]//d=4</li><li>支持多维数组的结构<br>const [a,b,[c,d]]=[1,2,[3,4]]</li></ol><h2 id="2-对象解构"><a href="#2-对象解构" class="headerlink" title="2.对象解构"></a>2.对象解构</h2><p>对象解构是将对象属性和方法快速批量赋值给一系列变量的简洁语法<br>基本语法：</p><ol><li>赋值运算符=左侧的}用于批量声明变量，右侧对象的属性值将被赋值给左侧的变量</li><li>对象属性的值将被赋值给与属性名相同的变量</li><li>注意解构的变量名不要和外面的变量名冲突否则报错</li><li>对象中找不到与变量名一致的属性时变量值为undefined</li><li>可以给新的变量名赋值 什么值:赋值给谁<br>const {name:uname,age}=user</li></ol><h2 id="3-数组对象解构"><a href="#3-数组对象解构" class="headerlink" title="3.数组对象解构"></a>3.数组对象解构</h2><h2 id="4-多个对象解构"><a href="#4-多个对象解构" class="headerlink" title="4.多个对象解构"></a>4.多个对象解构</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">const</span> pig=&#123;</span><br><span class="line">    <span class="attr">name</span>:<span class="string">&#x27;佩奇&#x27;</span>，</span><br><span class="line">    <span class="attr">family</span>:</span><br><span class="line">    <span class="attr">mother</span>:<span class="string">&#x27;猪妈妈&#x27;</span>，</span><br><span class="line">    <span class="attr">father</span>:<span class="string">&#x27;猪爸爸&#x27;</span>，</span><br><span class="line">    <span class="attr">sister</span>:<span class="string">&#x27;乔治&#x27;</span></span><br><span class="line">    &#125;,</span><br><span class="line">    <span class="attr">age</span>:<span class="number">6</span></span><br><span class="line">&#125;</span><br><span class="line"><span class="comment">//多级对象解构const &#123;name,family:&#123;mother,father,sister&#125;&#125;=pig</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;h2 id=&quot;1-局部作用域&quot;&gt;&lt;a href=&quot;#1-局部作用域&quot; class=&quot;headerlink&quot; title=</summary>
      
    
    
    
    <category term="js" scheme="https://magic.thisis.host/categories/js/"/>
    
    
    <category term="js" scheme="https://magic.thisis.host/tags/js/"/>
    
  </entry>
  
  <entry>
    <title>js操作属性和定时器以及相关案例</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0722/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0722/</id>
    <published>2024-07-22T07:51:58.000Z</published>
    <updated>2024-07-23T05:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、操作元素属性"><a href="#一、操作元素属性" class="headerlink" title="一、操作元素属性"></a>一、操作元素属性</h1><h2 id="1-操作元素常用属性"><a href="#1-操作元素常用属性" class="headerlink" title="1.操作元素常用属性"></a>1.操作元素常用属性</h2><p>对象.属性&#x3D;值</p><h2 id="2-操作元素样式属性"><a href="#2-操作元素样式属性" class="headerlink" title="2.操作元素样式属性"></a>2.操作元素样式属性</h2><h3 id="通过style属性操作css"><a href="#通过style属性操作css" class="headerlink" title="通过style属性操作css"></a>通过style属性操作css</h3><p>对象.style.样式属性&#x3D;值<br>&#x2F;&#x2F;获取元素<br>const box document.querySelector(‘.box’)<br>&#x2F;&#x2F;修改元素样式</p><h4 id="1-修改样式通过style属性引出"><a href="#1-修改样式通过style属性引出" class="headerlink" title="1.修改样式通过style属性引出"></a>1.修改样式通过style属性引出</h4><p>box.style.width ‘200px<br>box.style.marginTop &#x3D;’15px</p><h4 id="2-如果属性有-连接符，需要转换为小驼峰命名法"><a href="#2-如果属性有-连接符，需要转换为小驼峰命名法" class="headerlink" title="2.如果属性有-连接符，需要转换为小驼峰命名法"></a>2.如果属性有-连接符，需要转换为小驼峰命名法</h4><p>box.style.backgroundColor &#x3D;’pink’</p><h4 id="3-赋值的时候，需要的时候不要忘记加css单位"><a href="#3-赋值的时候，需要的时候不要忘记加css单位" class="headerlink" title="3.赋值的时候，需要的时候不要忘记加css单位"></a>3.赋值的时候，需要的时候不要忘记加css单位</h4><h3 id="通过className操作css"><a href="#通过className操作css" class="headerlink" title="通过className操作css"></a>通过className操作css</h3><p>元素.className&#x3D;’类名(不加点)’<br><strong>注意：</strong><br>由于class是关键字，所以使用className去代替<br>className是使用新值换旧值实现覆盖，如果需要添加一个类，需要保留之前的类名</p><h3 id="通过classList操作css"><a href="#通过classList操作css" class="headerlink" title="通过classList操作css"></a>通过classList操作css</h3><p>使用className容易覆盖以前的类名，可以使用classList方式追加和删除类名<br>&#x2F;&#x2F;追加一个类<br>元素.classList.add(‘类名’)<strong>类名不加点且是字符串</strong><br>&#x2F;&#x2F;删除一个类<br>元素.classList.remove(‘类名’)<br>&#x2F;&#x2F;切换一个类(有就删，没有就加)<br>元素.classList.toggle(‘类名’)</p><h2 id="3-操作表单元素属性"><a href="#3-操作表单元素属性" class="headerlink" title="3.操作表单元素属性"></a>3.操作表单元素属性</h2><p>获取：DOM对象.属性名<br>设置：DOM对象.属性名&#x3D;新值<br>表单.value&#x3D;’用户名’<br>表单.type&#x3D;’password’<br><strong>注意</strong>：获取表单内容只能用”表单.value”,但button特殊使用button.innerHTML,因为button的已经是标签内的内容，innerHTML获取的是双标签内的提示内容</p><p>表单属性中添加就有效果，移除就没有效果，一律使用布尔值表示如果为true代表添加了该属性如果是false代表移除了该属性<br>比如：disabled禁用、checked勾选、selected</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></pre></td><td class="code"><pre><span class="line">&lt;button disabled&gt;&lt;/button&gt;</span><br><span class="line"><span class="keyword">const</span> button=<span class="variable language_">document</span>.<span class="title function_">querySeletor</span>(<span class="string">&#x27;button&#x27;</span>)</span><br><span class="line">button.<span class="property">disabled</span>=<span class="literal">false</span><span class="comment">//表示不能禁用</span></span><br></pre></td></tr></table></figure><h2 id="4-自定义属性"><a href="#4-自定义属性" class="headerlink" title="4.自定义属性"></a>4.自定义属性</h2><p>自定义属性：<br>在html5中推出来了专门的data-自定义属性<br>在标签上一律以data-开头<br>在DOM对象上一律以dataset对象方式获取</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><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">&lt;<span class="selector-tag">body</span>&gt;</span><br><span class="line">    &lt;<span class="selector-tag">div</span> class=&quot;box&quot;,data-id=&quot;<span class="number">10</span>&quot;,data-smp=&quot;<span class="number">21</span>&quot;&gt;盒子&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">&lt;script&gt;</span><br><span class="line">    const box document<span class="selector-class">.querySelector</span>(&#x27;<span class="selector-class">.box</span>&#x27;)</span><br><span class="line">    console<span class="selector-class">.log</span>(box<span class="selector-class">.dataset</span><span class="selector-class">.id</span>)</span><br><span class="line">    console<span class="selector-class">.log</span>(box<span class="selector-class">.dataset</span><span class="selector-class">.smp</span>)</span><br><span class="line">&lt;/script&gt;</span><br><span class="line">&lt;/<span class="selector-tag">body</span>&gt;</span><br></pre></td></tr></table></figure><h1 id="五、定时器-间歇函数"><a href="#五、定时器-间歇函数" class="headerlink" title="五、定时器-间歇函数"></a>五、定时器-间歇函数</h1><p>单位为毫秒，返回的是一个id数字，函数名不需要加括号</p><h2 id="打开定时器"><a href="#打开定时器" class="headerlink" title="打开定时器"></a>打开定时器</h2><p>1. </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="built_in">setInterval</span> (<span class="keyword">function</span>(<span class="params"></span>)&#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;一秒执行一次&#x27;</span>)</span><br><span class="line">&#125;,<span class="number">1000</span>)</span><br><span class="line"><span class="comment">//1000毫秒即为1秒，数字越小表示跳转间隔越小，跳转越快</span></span><br></pre></td></tr></table></figure><p>2. </p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">function</span> <span class="title function_">fn</span>(<span class="params"></span>) &#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;一秒执行一次&#x27;</span>)</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">setInterval</span>(fn,<span class="number">1000</span>)</span><br><span class="line"><span class="comment">//这里调用函数不要加(),fn()表示立即调用函数，但在定时器里是主动调用</span></span><br></pre></td></tr></table></figure><h2 id="关闭定时器"><a href="#关闭定时器" class="headerlink" title="关闭定时器"></a>关闭定时器</h2><p>1. </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> timer = <span class="built_in">setInterval</span>(<span class="keyword">function</span>(<span class="params"></span>)&#123;</span><br><span class="line"><span class="variable language_">console</span>.<span class="title function_">log</span>(<span class="string">&#x27;hi~~&#x27;</span>)</span><br><span class="line">&#125;,<span class="number">1000</span>)</span><br><span class="line"><span class="built_in">clearInterval</span>(timer)</span><br></pre></td></tr></table></figure><p>2. </p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> 变量名 = <span class="title function_">seyInterval</span>(函数，间隔函数)</span><br><span class="line"><span class="built_in">clearInterval</span>(变量名)</span><br></pre></td></tr></table></figure><h1 id="用户倒计时效果案例"><a href="#用户倒计时效果案例" class="headerlink" title="用户倒计时效果案例"></a>用户倒计时效果案例</h1><h2 id="案例要求"><a href="#案例要求" class="headerlink" title="案例要求"></a>案例要求</h2><p>文本框里放用户协议，倒计时结束前不能点击同意</p><h2 id="大致思路"><a href="#大致思路" class="headerlink" title="大致思路"></a>大致思路</h2><p>设置一个含有倒计时的按钮，获取按钮对象，利用定时器函数，不断修改倒计时内容，当倒计时数字为0时，关闭定时器，将禁用取消，文字改为同意</p><h2 id="完整代码"><a href="#完整代码" class="headerlink" title="完整代码"></a>完整代码</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><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">&lt;!DOCTYPE <span class="selector-tag">html</span>&gt;</span><br><span class="line">&lt;<span class="selector-tag">html</span> lang=&quot;en&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta charset=&quot;UTF-<span class="number">8</span>&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; <span class="attribute">content</span>=&quot;<span class="attribute">width</span>=device-<span class="attribute">width</span>, initial-<span class="attribute">scale</span>=<span class="number">1.0</span>&quot;&gt;</span><br><span class="line">    &lt;title&gt;Document&lt;/title&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;<span class="selector-tag">body</span>&gt;</span><br><span class="line">    &lt;<span class="selector-tag">textarea</span> name=&quot;&quot; id=&quot;&quot; col=&quot;<span class="number">30</span>&quot; rows=&quot;<span class="number">10</span>&quot;&gt;</span><br><span class="line">        用户注册协议</span><br><span class="line">        xxx是哈哈怪，看完才能点确认</span><br><span class="line">    &lt;/<span class="selector-tag">textarea</span>&gt;</span><br><span class="line">    &lt;br&gt;</span><br><span class="line">    &lt;<span class="selector-tag">button</span> class=&quot;btn&quot; disabled&gt;确认(<span class="number">8</span>)&lt;/<span class="selector-tag">button</span>&gt;</span><br><span class="line">    &lt;script&gt;</span><br><span class="line">        let <span class="selector-tag">i</span>=<span class="number">8</span></span><br><span class="line">        const btn=document<span class="selector-class">.querySelector</span>(&#x27;<span class="selector-class">.btn</span>&#x27;)</span><br><span class="line">        let n=setInterval(function()&#123;</span><br><span class="line">            <span class="selector-tag">i</span>--</span><br><span class="line">            btn<span class="selector-class">.innerHTML</span>=`确认$&#123;<span class="selector-tag">i</span>&#125;`</span><br><span class="line">            if(<span class="selector-tag">i</span>===<span class="number">0</span>)&#123;</span><br><span class="line">                clearInterval(n)</span><br><span class="line">                btn<span class="selector-class">.disabled</span>=false</span><br><span class="line">                btn<span class="selector-class">.innerHTML</span>=&#x27;同意&#x27;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;,<span class="number">1000</span>)</span><br><span class="line">    &lt;/script&gt;</span><br><span class="line">&lt;/<span class="selector-tag">body</span>&gt;</span><br><span class="line">&lt;/<span class="selector-tag">html</span>&gt;</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;h2 id=&quot;1-操作元素常用属性&quot;&gt;&lt;a href=&quot;#1-操作元素常用属性&quot; class=&quot;</summary>
      
    
    
    
    <category term="js" scheme="https://magic.thisis.host/categories/js/"/>
    
    
    <category term="js" scheme="https://magic.thisis.host/tags/js/"/>
    
  </entry>
  
  <entry>
    <title>会展开的魔方和交错的小块</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0701/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0701/</id>
    <published>2024-07-01T07:51:58.000Z</published>
    <updated>2024-07-02T05:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、交错的小块"><a href="#一、交错的小块" class="headerlink" title="一、交错的小块"></a>一、交错的小块</h1><h2 id="1-大致思路"><a href="#1-大致思路" class="headerlink" title="1.大致思路"></a>1.大致思路</h2><h3 id="1-基本结构"><a href="#1-基本结构" class="headerlink" title="1.基本结构"></a>1.基本结构</h3><p>构建父级正方形盒子后分别在左上角和右下角放两个占父级盒子25%的小盒子，用子绝父相的定位方式将子盒子固定在父盒子中</p><h3 id="2-实现动态移动"><a href="#2-实现动态移动" class="headerlink" title="2.实现动态移动"></a>2.实现动态移动</h3><p>因为两个盒子移动的方式不同，所以分别设置动画属性</p><p><strong>注意</strong>  x轴正方向水平向右，y轴正方向为垂直向下，移动时要加单位，四条边移动四次，一次移动25%</p><p><strong>盒子1</strong>：以左上角为原点，移到右上角坐标为(200，0)，移到右下角坐标为(200,200)，移到左下角坐标为(0，200)，最后回到原点</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><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">@keyframes</span> move1 &#123;</span><br><span class="line">    <span class="number">0%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">25%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">200px</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">50%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">200px</span>,<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">75%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">100%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>盒子2</strong><br>以右下角为原点，移到左下角坐标为(-200，0)，移到左上角坐标为(-200,-200)，移到右上角坐标为(0，-200)，最后回到原点</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><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">@keyframes</span> move2 &#123;</span><br><span class="line">    <span class="number">0%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">25%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(-<span class="number">200px</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">50%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(-<span class="number">200px</span>,-<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">75%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,-<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">100%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="2-最终版代码"><a href="#2-最终版代码" class="headerlink" title="2.最终版代码"></a>2.最终版代码</h2><p>html</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><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></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE <span class="selector-tag">html</span>&gt;</span><br><span class="line">&lt;<span class="selector-tag">html</span> lang=&quot;en&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta charset=&quot;UTF-<span class="number">8</span>&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; <span class="attribute">content</span>=&quot;<span class="attribute">width</span>=device-<span class="attribute">width</span>, initial-<span class="attribute">scale</span>=<span class="number">1.0</span>&quot;&gt;</span><br><span class="line">    &lt;title&gt;Document&lt;/title&gt;</span><br><span class="line">    &lt;link rel=&quot;stylesheet&quot; href=&quot;style1<span class="selector-class">.css</span>&quot;&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;<span class="selector-tag">body</span>&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span> class=&quot;box&quot;&gt;</span><br><span class="line">            &lt;<span class="selector-tag">div</span> class=&quot;box_l&quot;&gt;&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">            &lt;<span class="selector-tag">div</span> class=&quot;box_r&quot;&gt;&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">        &lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">&lt;/<span class="selector-tag">body</span>&gt;</span><br><span class="line">&lt;/<span class="selector-tag">html</span>&gt;</span><br></pre></td></tr></table></figure><p>css</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><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br></pre></td><td class="code"><pre><span class="line">* &#123;</span><br><span class="line">    <span class="attribute">padding</span>:<span class="number">0</span>;</span><br><span class="line">    <span class="attribute">margin</span>:<span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.box</span> &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">400px</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">400px</span>;</span><br><span class="line">    <span class="attribute">margin</span>:<span class="number">100px</span> auto;</span><br><span class="line">    <span class="attribute">position</span>: relative;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.box</span> <span class="selector-class">.box_l</span> &#123;</span><br><span class="line">    <span class="attribute">position</span>: absolute;</span><br><span class="line">    <span class="attribute">top</span>:<span class="number">0</span>;</span><br><span class="line">    <span class="attribute">left</span>:<span class="number">0</span>;</span><br><span class="line">    <span class="attribute">background-color</span>: pink;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">200px</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">200px</span>;</span><br><span class="line">    <span class="attribute">animation</span>:move1 <span class="number">5s</span> infinite;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.box</span> <span class="selector-class">.box_r</span> &#123;</span><br><span class="line">    <span class="attribute">position</span>: absolute;</span><br><span class="line">    <span class="attribute">bottom</span>:<span class="number">0</span>;</span><br><span class="line">    <span class="attribute">right</span>:<span class="number">0</span>;</span><br><span class="line">    <span class="attribute">background-color</span>: bisque;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">200px</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">200px</span>;</span><br><span class="line">    <span class="attribute">animation</span>:move2 <span class="number">5s</span> infinite;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">@keyframes</span> move1 &#123;</span><br><span class="line">    <span class="number">0%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">25%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">200px</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">50%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">200px</span>,<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">75%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">100%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">@keyframes</span> move2 &#123;</span><br><span class="line">    <span class="number">0%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">25%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(-<span class="number">200px</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">50%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(-<span class="number">200px</span>,-<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">75%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,-<span class="number">200px</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">100%</span>&#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">translate</span>(<span class="number">0</span>,<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="二、会展开的魔方"><a href="#二、会展开的魔方" class="headerlink" title="二、会展开的魔方"></a>二、会展开的魔方</h1><h3 id="1-基本结构-1"><a href="#1-基本结构-1" class="headerlink" title="1.基本结构;"></a>1.基本结构;</h3><p>放一个大盒子container用于装魔方，<strong>记得最后加3d效果</strong>，大盒子中放六个盒子为魔方的六个面，加绝对定位将六个面固定在一起</p><h3 id="2-静态魔方的构建"><a href="#2-静态魔方的构建" class="headerlink" title="2.静态魔方的构建"></a>2.静态魔方的构建</h3><p><strong>注意：</strong><br><strong>所有的面</strong>都是朝z轴方向移动面的一半距离（75px）,即与人眼的距离拉近75px,并且当鼠标经过时距离拉近200px，<strong>特别注意</strong>当设置各个面时<strong>虽然</strong>普遍情况下我们应该先写移动的距离再旋转，<strong>但是</strong>对于魔方来说，先移动再旋转不会构成封闭的立方体</p><p>前面1：</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><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-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">1</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">1</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>右面2：</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><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-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>后面3：</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><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-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">180deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">180deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>左面4;</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><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-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">270deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">270deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>上面5：</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><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-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">5</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">5</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>下面6:</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><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-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">5</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(-<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">5</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(-<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="3-让静态的魔方动起来"><a href="#3-让静态的魔方动起来" class="headerlink" title="3.让静态的魔方动起来"></a>3.让静态的魔方动起来</h3><p>由于魔方的六个面都在大盒子container里，所以只需让大盒子旋转即可实现效果，我们使用动画的属性让魔方动起来，从初始0度到360度让他转一圈，如果x,y轴都写的话就是沿着xOy平面的角平分线旋转</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><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="keyword">@keyframes</span> rotate &#123;</span><br><span class="line">    <span class="number">0%</span> &#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">0</span>) <span class="built_in">rotateY</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="number">100%</span> &#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">360deg</span>) <span class="built_in">rotateY</span>(<span class="number">360deg</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="selector-class">.container</span> &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">150px</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">150px</span>;</span><br><span class="line">    <span class="attribute">transform-style</span>: preserve-<span class="number">3</span>d;</span><br><span class="line">    <span class="attribute">position</span>: relative;</span><br><span class="line">    <span class="attribute">animation</span>: rotate <span class="number">5s</span> infinite linear;</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">250px</span> <span class="number">250px</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="2-最终版代码-1"><a href="#2-最终版代码-1" class="headerlink" title="2.最终版代码"></a>2.最终版代码</h2><p><strong>html</strong></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><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">&lt;!DOCTYPE <span class="selector-tag">html</span>&gt;</span><br><span class="line">&lt;<span class="selector-tag">html</span> lang=&quot;en&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta charset=&quot;UTF-<span class="number">8</span>&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; <span class="attribute">content</span>=&quot;<span class="attribute">width</span>=device-<span class="attribute">width</span>, initial-<span class="attribute">scale</span>=<span class="number">1.0</span>&quot;&gt;</span><br><span class="line">    &lt;title&gt;Document&lt;/title&gt;</span><br><span class="line">    &lt;link rel=&quot;stylesheet&quot; href=&quot;style<span class="selector-class">.css</span>&quot;&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;<span class="selector-tag">body</span>&gt;</span><br><span class="line">    &lt;<span class="selector-tag">div</span> class=&quot;<span class="attribute">container</span>&quot;&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span>&gt;<span class="selector-tag">a</span>&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span>&gt;<span class="selector-tag">a</span>&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span>&gt;<span class="selector-tag">a</span>&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span>&gt;<span class="selector-tag">a</span>&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span>&gt;<span class="selector-tag">a</span>&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span>&gt;<span class="selector-tag">a</span>&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">    &lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">&lt;/<span class="selector-tag">body</span>&gt;</span><br><span class="line">&lt;/<span class="selector-tag">html</span>&gt;</span><br></pre></td></tr></table></figure><p><strong>css</strong></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><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br></pre></td><td class="code"><pre><span class="line">* &#123;</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">0</span>;</span><br><span class="line">    <span class="attribute">padding</span>: <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-tag">body</span> &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">150px</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">150px</span>;</span><br><span class="line">    <span class="attribute">perspective</span>: <span class="number">1000px</span>;<span class="comment">/*实现近大远小的效果*/</span></span><br><span class="line">    <span class="attribute">background</span>: <span class="number">#000</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">@keyframes</span> rotate &#123;</span><br><span class="line">    <span class="number">0%</span> &#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">0</span>) <span class="built_in">rotateY</span>(<span class="number">0</span>);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="number">100%</span> &#123;</span><br><span class="line">        <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">360deg</span>) <span class="built_in">rotateY</span>(<span class="number">360deg</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="selector-class">.container</span> &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">150px</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">150px</span>;</span><br><span class="line">    <span class="attribute">transform-style</span>: preserve-<span class="number">3</span>d;</span><br><span class="line">    <span class="attribute">position</span>: relative;</span><br><span class="line">    <span class="attribute">animation</span>: rotate <span class="number">5s</span> infinite linear;</span><br><span class="line">    <span class="attribute">margin</span>: <span class="number">250px</span> <span class="number">250px</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">180deg</span>) <span class="built_in">rotateX</span>(<span class="number">180deg</span>);</span><br><span class="line">&#125;<span class="comment">/*也可以不写这个hover,它的目的只是更美观*/</span></span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span> <span class="selector-tag">div</span> &#123;</span><br><span class="line">    <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">150px</span>;</span><br><span class="line">    <span class="attribute">position</span>: absolute;</span><br><span class="line">    <span class="attribute">background-color</span>: <span class="number">#ccc</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">1</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">1</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">2</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">3</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">180deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">3</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">180deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">4</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">270deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">4</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateY</span>(<span class="number">270deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">5</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">5</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">6</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(-<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">75px</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="selector-class">.container</span><span class="selector-pseudo">:hover</span> <span class="selector-tag">div</span><span class="selector-pseudo">:nth-child</span>(<span class="number">6</span>) &#123;</span><br><span class="line">    <span class="attribute">transform</span>: <span class="built_in">rotateX</span>(-<span class="number">90deg</span>) <span class="built_in">translateZ</span>(<span class="number">200px</span>);</span><br><span class="line">&#125;</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;h2 id=&quot;1-大致思路&quot;&gt;&lt;a href=&quot;#1-大致思路&quot; class=&quot;headerlink&quot; </summary>
      
    
    
    
    <category term="css" scheme="https://magic.thisis.host/categories/css/"/>
    
    
    <category term="css" scheme="https://magic.thisis.host/tags/css/"/>
    
    <category term="css动画，页面练习" scheme="https://magic.thisis.host/tags/css%E5%8A%A8%E7%94%BB%EF%BC%8C%E9%A1%B5%E9%9D%A2%E7%BB%83%E4%B9%A0/"/>
    
  </entry>
  
  <entry>
    <title>js获取、操作对象以及年会抽奖案例</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0625/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0625/</id>
    <published>2024-06-25T09:25:29.000Z</published>
    <updated>2024-06-25T15:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="基础语法04"><a href="#基础语法04" class="headerlink" title="基础语法04"></a>基础语法04</h1><h1 id="一、对象"><a href="#一、对象" class="headerlink" title="一、对象"></a>一、对象</h1><h2 id="1-定义"><a href="#1-定义" class="headerlink" title="1.定义"></a>1.定义</h2><p>JavaScript里的一种数据类型，可以理解为无序的数据集合，数组为有序的数据集合</p><h2 id="2-特点"><a href="#2-特点" class="headerlink" title="2.特点"></a>2.特点</h2><p>无序的数据的集合，可以详细的描述某个事物</p><h1 id="二、对象的使用"><a href="#二、对象的使用" class="headerlink" title="二、对象的使用"></a>二、对象的使用</h1><h2 id="1-声明"><a href="#1-声明" class="headerlink" title="1.声明"></a>1.声明</h2><p>let 对象名 &#x3D; {} let 对象名&#x3D;new Object()</p><h2 id="2-由属性和方法组成"><a href="#2-由属性和方法组成" class="headerlink" title="2.由属性和方法组成"></a>2.由属性和方法组成</h2><p>let 对象名&#x3D;{<br>    属性名:属性值,<br>    方法名:函数,<br>}</p><h2 id="3-属性"><a href="#3-属性" class="headerlink" title="3.属性"></a>3.属性</h2><p>属性都是成对出现的，包括属性名和值，它们之间使用英文：分隔<br>多个属性之间使用英文，分隔<br>属性就是依附在对象上的变量（外面是变量，对象内是属性）<br>属性名可以使用”或”，一般情况下省略，除非名称遇到特殊符号如空格、中横线等</p><h2 id="4-增删改查"><a href="#4-增删改查" class="headerlink" title="4.增删改查"></a>4.增删改查</h2><p>查:对象.属性 或 对象名[‘属性名’]单引或双引都可以<br>改:对象.属性值&#x3D;值<br>增:对象名.新属性名&#x3D;新值<br>删:delete 对象名.属性名<br>其中增和改的语法类似，当对象中有这个属性时，为改，当对象没有这个属性时，为增</p><h2 id="5-方法"><a href="#5-方法" class="headerlink" title="5.方法"></a>5.方法</h2><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">let</span> person = &#123;</span><br><span class="line">    <span class="attr">name</span>:<span class="string">&#x27;andy&#x27;</span>,</span><br><span class="line">    <span class="attr">sayHi</span>: <span class="keyword">function</span>(<span class="params"></span>)&#123;</span><br><span class="line">        <span class="variable language_">document</span>.<span class="title function_">write</span>(hi)</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>方法是由方法名和函数两部分构成，它们之间使用：分隔<br>方法调用时也可以添加形参或实参，即使没有参数也要写(),person.sayHi()<br>方法是依附在对象中的函数<br>方法名可以使用”或”，一般情况下省略，除非名称遇到特殊符号如空格、中横线等</p><h1 id="三、遍历对象"><a href="#三、遍历对象" class="headerlink" title="三、遍历对象"></a>三、遍历对象</h1><p>k为字符串，代表对象里带引号的属性名’name’<br>获得对象属性为k<br>获得对象值为obj[k]</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span>(<span class="keyword">let</span> k <span class="keyword">in</span> obj)&#123;</span><br><span class="line">    <span class="variable language_">console</span>.<span class="title function_">log</span>(obj[k])</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="四、内置对象"><a href="#四、内置对象" class="headerlink" title="四、内置对象"></a>四、内置对象</h1><h2 id="1-介绍"><a href="#1-介绍" class="headerlink" title="1.介绍"></a>1.介绍</h2><p>Math对象是JavaScript提供的数学对象</p><h2 id="2-作用"><a href="#2-作用" class="headerlink" title="2.作用"></a>2.作用</h2><p>提供了一系列做数学运算的方法</p><h2 id="3-方法"><a href="#3-方法" class="headerlink" title="3.方法"></a>3.方法</h2><p>ceil:向上取整<br>floor:向下取整<br>round:四舍五入，对于负数-1.5四舍五入为-1<br>max:找最大数<br>min:找最小数<br>pow:幂运算<br>abs:绝对值<br>Math对象在线文档，搜索mdn文档<br>random:生成0-1之间的随机数（包含0不包括1）</p><h2 id="注意："><a href="#注意：" class="headerlink" title="注意："></a>注意：</h2><p>null也是Javascript中数据类型中的一种，通常只用它表示不存在的对象，使用typeof检测类型时结果为object</p><h2 id="生成任意范围的随机数"><a href="#生成任意范围的随机数" class="headerlink" title="生成任意范围的随机数"></a>生成任意范围的随机数</h2><p>如何生成<code>[N,M]</code>的随机数<code>Math.floor(Math.random()*(M-N+1))+N</code></p><h1 id="五、声明变量注意"><a href="#五、声明变量注意" class="headerlink" title="五、声明变量注意"></a>五、声明变量注意</h1><ol><li>以后声明变量我们优先使用哪个？<br>const<br>有了变量先给const,如果发现它后面是要被修改的，再改为let</li><li>为什么consti声明的对象可以修改里面的属性？<br>因为对象是引用类型，里面存储的是地址，只要地址不变，就不会报错<br>建议数组和对象使用const来声明</li><li>什么时候使用let声明变量？<br>如果基本数据类型的值或者引用类型的地址发生变化的时候，需要用let<br>比如一个变量进行加减运算，比如fo循环中的i++</li></ol><h1 id="WebAPI01"><a href="#WebAPI01" class="headerlink" title="WebAPI01"></a>WebAPI01</h1><h1 id="一、Web-API-基本认知"><a href="#一、Web-API-基本认知" class="headerlink" title="一、Web API 基本认知"></a>一、Web API 基本认知</h1><h2 id="1-作用和分类"><a href="#1-作用和分类" class="headerlink" title="1.作用和分类"></a>1.作用和分类</h2><p>作用：使用js操作html和浏览器，分类：DOM,BOM</p><h2 id="2-DOM"><a href="#2-DOM" class="headerlink" title="2.DOM"></a>2.DOM</h2><p>DOM(Document Object Model-一文档对象模型)是用来呈现以及与任意HTML或XML文档交互的API<br>白话文：DOM是浏览器提供的一套专门用来操作网页内容的功能<br>作用：操作网页内容，可以开发网页内容特效和实现用户交互</p><h2 id="3-DOM树"><a href="#3-DOM树" class="headerlink" title="3.DOM树"></a>3.DOM树</h2><p>将HTML文档以树状结构直观的表现出来，我们称之为文档树或DOM树<br>描述网页内容关系的名词<br>作用：文档树直观的体现了标签与标签之间的关系</p><h2 id="4-DOM对象"><a href="#4-DOM对象" class="headerlink" title="4.DOM对象"></a>4.DOM对象</h2><p>定义：浏览器根据html标签生成的js对象<br>核心思想：把网页内容当做对象来处理<br>document对象<br>是DOM里提供的一个对象<br>所以它提供的属性和方法都是用来访问和操作网页内容的<br>例：document.write()<br>网页所有内容都在document里面</p><h1 id="二、获取DOM对象"><a href="#二、获取DOM对象" class="headerlink" title="二、获取DOM对象"></a>二、获取DOM对象</h1><h2 id="1-根据css选择器来获取DOM对象"><a href="#1-根据css选择器来获取DOM对象" class="headerlink" title="1.根据css选择器来获取DOM对象"></a>1.根据css选择器来获取DOM对象</h2><h3 id="选择匹配的第一个元素"><a href="#选择匹配的第一个元素" class="headerlink" title="选择匹配的第一个元素"></a>选择匹配的第一个元素</h3><p>document.querySelector(‘css选择器’)，可以直接修改值</p><h3 id="选择匹配的多个元素"><a href="#选择匹配的多个元素" class="headerlink" title="选择匹配的多个元素"></a>选择匹配的多个元素</h3><p><code>document.querySelectorAll(&#39;css选择器&#39;)</code>，不可以直接修改值，需要遍历得到每一个元素，得到一个有长度有索引号的伪数组，但是没有pop(),push()</p><h2 id="2-其他获取DOM元素方法"><a href="#2-其他获取DOM元素方法" class="headerlink" title="2.其他获取DOM元素方法"></a>2.其他获取DOM元素方法</h2><p>根据id获取一个元素<code>document.getElementById(&#39;nav&#39;)</code><br>根据标签获取一类元素获取页面所有div,<code>document.getElementsByTagName(&#39;div&#39;)</code><br>根据类名获取元素获取页面所有类名为w的<code>document.getElementsByClassName(&#39;W&#39;)</code></p><h1 id="三、操作元素内容"><a href="#三、操作元素内容" class="headerlink" title="三、操作元素内容"></a>三、操作元素内容</h1><h2 id="1-对象-innerText-属性"><a href="#1-对象-innerText-属性" class="headerlink" title="1.对象.innerText 属性"></a>1.对象.innerText 属性</h2><p>将文本内容添加&#x2F;更新到任意标签位置，显示纯文本，不解析标签</p><h2 id="2-对象-innerHTML-属性"><a href="#2-对象-innerHTML-属性" class="headerlink" title="2.对象.innerHTML 属性"></a>2.对象.innerHTML 属性</h2><p>将文本内容添加&#x2F;更新到任意标签位置，解析标签</p><h1 id="年会抽奖案例"><a href="#年会抽奖案例" class="headerlink" title="年会抽奖案例"></a>年会抽奖案例</h1><h2 id="案例要求"><a href="#案例要求" class="headerlink" title="案例要求"></a>案例要求</h2><p>一等奖二等奖三等奖随机各抽一个人，并且要求不重复</p><h2 id="大致思路"><a href="#大致思路" class="headerlink" title="大致思路"></a>大致思路</h2><h3 id="html"><a href="#html" class="headerlink" title="html:"></a>html:</h3><p>放一个大盒子里有strong标签的加粗标题和三个不同量级的标题，标题里放span行内元素的盒子放人名</p><h3 id="css"><a href="#css" class="headerlink" title="css:"></a>css:</h3><p>大致加些样式，也可以放背景图片</p><h3 id="js-渲染box"><a href="#js-渲染box" class="headerlink" title="js:渲染box"></a>js:渲染box</h3><h4 id="1-获取随机数random"><a href="#1-获取随机数random" class="headerlink" title="1.获取随机数random"></a>1.获取随机数random</h4><p>注意每一次抽奖后的数组长度都减一，所以设置一个变量 j 记录已经抽出的人数，如果不实时改变数组长度可能会抽出undefined</p><h4 id="2-获取DOM对象"><a href="#2-获取DOM对象" class="headerlink" title="2.获取DOM对象"></a>2.获取DOM对象</h4><p>用模板字符串实时改变获取的对象</p><h4 id="3-操作元素内容"><a href="#3-操作元素内容" class="headerlink" title="3.操作元素内容"></a>3.操作元素内容</h4><p>将获取的随机人放入DOM对象中</p><h4 id="4-最后记得删除数组中抽出的那个随机对象"><a href="#4-最后记得删除数组中抽出的那个随机对象" class="headerlink" title="4.最后记得删除数组中抽出的那个随机对象"></a>4.最后记得删除数组中抽出的那个随机对象</h4><h2 id="完整代码"><a href="#完整代码" class="headerlink" title="完整代码"></a>完整代码</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><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></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE <span class="selector-tag">html</span>&gt;</span><br><span class="line">&lt;<span class="selector-tag">html</span> lang=&quot;en&quot;&gt;</span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta charset=&quot;UTF-<span class="number">8</span>&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; <span class="attribute">content</span>=&quot;<span class="attribute">width</span>=device-<span class="attribute">width</span>, initial-<span class="attribute">scale</span>=<span class="number">1.0</span>&quot;&gt;</span><br><span class="line">    &lt;title&gt;Document&lt;/title&gt;</span><br><span class="line">    &lt;style&gt;</span><br><span class="line">        <span class="selector-class">.box</span> &#123;</span><br><span class="line">            <span class="attribute">width</span>: <span class="number">300px</span>;</span><br><span class="line">            <span class="attribute">height</span>: <span class="number">300px</span>;</span><br><span class="line">            <span class="attribute">margin</span>:<span class="number">100px</span> auto;</span><br><span class="line">            <span class="attribute">background-color</span>: <span class="number">#383ab5</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line">&lt;<span class="selector-tag">body</span>&gt;</span><br><span class="line">    &lt;<span class="selector-tag">div</span> class=&quot;box&quot;&gt;</span><br><span class="line">        &lt;<span class="selector-tag">strong</span>&gt;年会抽奖&lt;/<span class="selector-tag">strong</span>&gt;</span><br><span class="line">        &lt;<span class="selector-tag">h1</span>&gt;一等奖:&lt;span class=<span class="string">&quot;ww1&quot;</span>&gt;&lt;/span&gt;&lt;/h1&gt;</span><br><span class="line">        &lt;h3&gt;二等奖:&lt;span class=<span class="string">&quot;ww2&quot;</span>&gt;&lt;/span&gt;&lt;/h3&gt;</span><br><span class="line">        &lt;h5&gt;三等奖:&lt;span class=<span class="string">&quot;ww3&quot;</span>&gt;&lt;/span&gt;&lt;/h5&gt;</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">    &lt;script&gt;</span><br><span class="line">        const arr=[<span class="string">&#x27;a&#x27;</span>,<span class="string">&#x27;b&#x27;</span>,<span class="string">&#x27;c&#x27;</span>,<span class="string">&#x27;d&#x27;</span>,<span class="string">&#x27;e&#x27;</span>,<span class="string">&#x27;f&#x27;</span>]</span><br><span class="line">        let j=<span class="number">0</span></span><br><span class="line">        <span class="built_in">for</span>(let i=<span class="number">1</span>;<span class="selector-tag">i</span>&lt;=<span class="number">3</span>;<span class="selector-tag">i</span>++)&#123;</span><br><span class="line">            const random =Math<span class="selector-class">.floor</span>(Math<span class="selector-class">.random</span>()*(arr<span class="selector-class">.length-j</span>))</span><br><span class="line">            const one = document<span class="selector-class">.querySelector</span>(`<span class="selector-class">.ww</span>$&#123;<span class="selector-tag">i</span>&#125;`)</span><br><span class="line">            one<span class="selector-class">.innerHTML</span> = arr<span class="selector-attr">[random]</span></span><br><span class="line">            arr<span class="selector-class">.splice</span>(random,<span class="number">1</span>)</span><br><span class="line">        &#125;</span><br><span class="line">    &lt;/script&gt;</span><br><span class="line">&lt;/<span class="selector-tag">body</span>&gt;</span><br><span class="line">&lt;/<span class="selector-tag">html</span>&gt;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;基础语法04&quot;&gt;&lt;a href=&quot;#基础语法04&quot; class=&quot;headerlink&quot; title=&quot;基础语法04&quot;&gt;&lt;/a&gt;基础语法04&lt;/h1&gt;&lt;h1 id=&quot;一、对象&quot;&gt;&lt;a href=&quot;#一、对象&quot; class=&quot;headerlink&quot; title=&quot;一</summary>
      
    
    
    
    <category term="javascript" scheme="https://magic.thisis.host/categories/javascript/"/>
    
    
    <category term="javascript" scheme="https://magic.thisis.host/tags/javascript/"/>
    
  </entry>
  
  <entry>
    <title>js基础语法(学过C语言版)</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0526/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0526/</id>
    <published>2024-06-03T09:25:29.000Z</published>
    <updated>2024-06-04T05:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="基础语法01"><a href="#基础语法01" class="headerlink" title="基础语法01"></a>基础语法01</h1><h1 id="一、js简介"><a href="#一、js简介" class="headerlink" title="一、js简介"></a>一、js简介</h1><h2 id="1-js是什么"><a href="#1-js是什么" class="headerlink" title="1.js是什么"></a>1.js是什么</h2><p>运行在浏览器上的编程语言，实现人机交互</p><h2 id="2-js的组成"><a href="#2-js的组成" class="headerlink" title="2.js的组成"></a>2.js的组成</h2><p>ECMASript和Web APIs(由DOM页面文档类型和BOM浏览器对象模型组成)</p><h2 id="3-js书写位置"><a href="#3-js书写位置" class="headerlink" title="3.js书写位置"></a>3.js书写位置</h2><h3 id="内部JavaSript"><a href="#内部JavaSript" class="headerlink" title="内部JavaSript:"></a>内部JavaSript:</h3><p>直接写在html文件里，用sript标签包住，在</body>的上方</p><h3 id="外部JavaSript"><a href="#外部JavaSript" class="headerlink" title="外部JavaSript:"></a>外部JavaSript:</h3><p>通过sript标签，引用到html页面里<sript src="">中间不要写代码，否则会被忽略</sript></p><h3 id="内联JavaSript-代码写在标签内部"><a href="#内联JavaSript-代码写在标签内部" class="headerlink" title="内联JavaSript:代码写在标签内部"></a>内联JavaSript:代码写在标签内部</h3><h2 id="4-js的注释和结束符"><a href="#4-js的注释和结束符" class="headerlink" title="4.js的注释和结束符"></a>4.js的注释和结束符</h2><p>单行注释 ctrl+&#x2F;<br>多行注释 shift+alt+a<br>结束符 分号，可写可不写</p><h2 id="5-js输入输出语法"><a href="#5-js输入输出语法" class="headerlink" title="5.js输入输出语法"></a>5.js输入输出语法</h2><h3 id="输出"><a href="#输出" class="headerlink" title="输出"></a>输出</h3><p>document.write(‘要输出的内容’)也可以加标签(<code>&lt;h1&gt;要输出的内容&lt;/h1&gt;</code>),标签加在&#96;&#96;里不起效<br>alert(‘’)<br>console.log(‘控制台打印’)</p><h3 id="输入"><a href="#输入" class="headerlink" title="输入"></a>输入</h3><p>prompt(‘’)</p><h2 id="6-字面量"><a href="#6-字面量" class="headerlink" title="6.字面量"></a>6.字面量</h2><p>数字字面量，字符串字面量，数组字面量，对象字面量</p><h1 id="二、变量"><a href="#二、变量" class="headerlink" title="二、变量"></a>二、变量</h1><h2 id="1-理解、作用"><a href="#1-理解、作用" class="headerlink" title="1.理解、作用"></a>1.理解、作用</h2><p>存储数据的容器，用于存储数据</p><h2 id="2-如何初始化"><a href="#2-如何初始化" class="headerlink" title="2.如何初始化"></a>2.如何初始化</h2><p>let 变量名 &#x3D; 值</p><h2 id="3-声明变量"><a href="#3-声明变量" class="headerlink" title="3.声明变量"></a>3.声明变量</h2><p>let age &#x3D; 18,name &#x3D; asd,逗号隔开但最好一行声明一个变量</p><h2 id="4-变量命名规则和规范"><a href="#4-变量命名规则和规范" class="headerlink" title="4.变量命名规则和规范"></a>4.变量命名规则和规范</h2><h3 id="规则"><a href="#规则" class="headerlink" title="规则"></a>规则</h3><p>不能用关键字<br>关键字：有特殊含义的字符，JavaScript内置的一些英语词汇。例如：let、var、if、for停<br>只能用下划线、字母、数字、$组成，且数字不能开头<br>字母严格区分大小写，如Age和age是不同的变量</p><h3 id="规范"><a href="#规范" class="headerlink" title="规范"></a>规范</h3><p>起名要有意义<br>遵守小驼峰命名法<br>第一个单词首字母小写，后面每个单词首字母大写。例：userName</p><h2 id="5-变量拓展let和var的区别"><a href="#5-变量拓展let和var的区别" class="headerlink" title="5.变量拓展let和var的区别"></a>5.变量拓展let和var的区别</h2><p>可以先使用在声明（不合理）<br>var声明过的变量可以重复声明（不合理）<br>比如变量提升、全局变量、没有块级作用域等等</p><h2 id="6-数组"><a href="#6-数组" class="headerlink" title="6.数组"></a>6.数组</h2><p>let arr &#x3D; []<br>元素：数组中保存的每个数据都叫数组元素<br>下标：数组中数据的编号<br>长度：数组中数据的个数，通过数组的length属性获得</p><h1 id="三、常量"><a href="#三、常量" class="headerlink" title="三、常量"></a>三、常量</h1><h2 id="1-概念"><a href="#1-概念" class="headerlink" title="1.概念"></a>1.概念</h2><p>使用const声明的变量称为“常量”。</p><h2 id="2-使用场景"><a href="#2-使用场景" class="headerlink" title="2.使用场景"></a>2.使用场景</h2><p>当某个变量永远不会改变的时候，就可以使用const来声明，而不是let。</p><h2 id="3-命名规范"><a href="#3-命名规范" class="headerlink" title="3.命名规范"></a>3.命名规范</h2><p>和变量一致</p><h2 id="4-常量使用："><a href="#4-常量使用：" class="headerlink" title="4.常量使用："></a>4.常量使用：</h2><p>&#x2F;&#x2F;声明一个常量<br>const G &#x3D; 9.8<br>&#x2F;输出这个常量<br>console.log(G)<br><strong>注意</strong>：常量不允许重新赋值，声明的时候必须赋值（初始化）<br><strong>小技巧</strong>：不需要重新赋值的数据使用const</p><h1 id="四、数据类型，js是弱数据类型，变量到底属于那种类型，只有赋值之后，我们才能确认"><a href="#四、数据类型，js是弱数据类型，变量到底属于那种类型，只有赋值之后，我们才能确认" class="headerlink" title="四、数据类型，js是弱数据类型，变量到底属于那种类型，只有赋值之后，我们才能确认"></a>四、数据类型，js是弱数据类型，变量到底属于那种类型，只有赋值之后，我们才能确认</h1><h2 id="1-基本数据类型"><a href="#1-基本数据类型" class="headerlink" title="1.基本数据类型"></a>1.基本数据类型</h2><p>number数字型，除了0，其余数字都为真<br>NaN表示一个错误并且是粘性的<br>string字符串型，除了空字符串，所有字符串都为真<br>想要输出单引号等可以用转义符&#39;&#39;<br>变量不能加单引号双引号反引号<br>+可以实现字符串拼接，例如：document.write(‘我今年’+age+’岁了’)<br>模板字符串：document.write(<code>我今年$&#123;age&#125;岁了</code>)自动识别换行<br>boolean布尔型 let isCool &#x3D; true<br>undefined未定义型,没赋值，不确定是什么类型<br>null空类型</p><h2 id="2-引用数据类型object对象"><a href="#2-引用数据类型object对象" class="headerlink" title="2.引用数据类型object对象"></a>2.引用数据类型object对象</h2><h2 id="3-检测数据类型"><a href="#3-检测数据类型" class="headerlink" title="3.检测数据类型"></a>3.检测数据类型</h2><p>typeof 变量名</p><h1 id="五、类型转换"><a href="#五、类型转换" class="headerlink" title="五、类型转换"></a>五、类型转换</h1><h2 id="1-隐式转换"><a href="#1-隐式转换" class="headerlink" title="1.隐式转换"></a>1.隐式转换</h2><p><strong>规则</strong>：<br>+号两边只要有一个是字符串。都会把另外一个转成字符串<br>除了+以外的算术运算符比如-*&#x2F;等都会把数据转成数字类型<br><strong>小技巧</strong>：<br>+号作为正号解析可以转换成数字型(+’123’)<br>任何数据和字符串相加结果都是字符串<br><strong>常见错误</strong>：<br>prompt传过来的为字符串类型，输出两数相加时，要先转换为数字型</p><h2 id="2-显示转换"><a href="#2-显示转换" class="headerlink" title="2.显示转换"></a>2.显示转换</h2><p>Number(数据)转成数字类型<br>如果字符串内容里有非数字，转换失败时结果为NaN(Not a Number)即不是一个数字<br>NaN也是number类型的数据，代表非数字<br>parselnt(数据)只保留整数<br>parseFloat(数据)可以保留小数</p><h1 id="基础语法02"><a href="#基础语法02" class="headerlink" title="基础语法02"></a>基础语法02</h1><h1 id="一、运算符"><a href="#一、运算符" class="headerlink" title="一、运算符"></a>一、运算符</h1><h2 id="赋值运算符"><a href="#赋值运算符" class="headerlink" title="赋值运算符"></a>赋值运算符</h2><p>&#x3D;,+&#x3D;,-&#x3D;,*&#x3D;,&#x2F;&#x3D;,%&#x3D;</p><h2 id="一元运算符"><a href="#一元运算符" class="headerlink" title="一元运算符"></a>一元运算符</h2><p>++,–</p><!-- let i=1console.log(i++ + ++i + i) --><p>结果为7</p><h2 id="比较运算符"><a href="#比较运算符" class="headerlink" title="比较运算符"></a>比较运算符</h2><p>有隐式转换，(2&#x3D;&#x3D;’2’)为true<br>可以比较字符串，从左到右比较，第一位一样再比较第二位<br>尽量不要比小数，有精度问题<br><code>&gt;</code>左边是否大于右边<br>&lt;左边是否小于右边<br><code>&gt;=</code>左边是否大于或等于右边<br>&lt;&#x3D;左边是否小于或等于右边<br>&#x3D;&#x3D;左右两边值是否相等<br>!&#x3D;左右两边是否不相等<br>&#x3D;&#x3D;&#x3D;左右两边是否类型和值都相等(开发中常用)<br>!&#x3D;&#x3D;左右两边是否不全等</p><h2 id="逻辑运算符"><a href="#逻辑运算符" class="headerlink" title="逻辑运算符:&amp;&amp;,||,!"></a>逻辑运算符:&amp;&amp;,||,!</h2><h2 id="运算符优先级"><a href="#运算符优先级" class="headerlink" title="运算符优先级"></a>运算符优先级</h2><p>1小括号()<br>2一元运算符++<br>3算数运算符先*&#x2F;%后+-<br>4关系运算符&gt;,&gt;&#x3D;,&lt;,&lt;&#x3D;<br>5相等运算符&#x3D;&#x3D;,!&#x3D;,&#x3D;&#x3D;&#x3D;,!&#x3D;&#x3D;<br>6逻辑运算符先&amp;&amp;后||<br>7赋值运算符&#x3D;<br>8逗号运算符</p><h1 id="二、语句"><a href="#二、语句" class="headerlink" title="二、语句"></a>二、语句</h1><h2 id="1-表达式和语句区别"><a href="#1-表达式和语句区别" class="headerlink" title="1.表达式和语句区别"></a>1.表达式和语句区别</h2><p>表达式：因为表达式可被求值，所以它可以写在赋值语句的右侧。<br>num&#x3D;3+4<br>语句：而语句不一定有值，所以比如alert()for和break等语句就不能被用于赋值。<br>alert()弹出对话框console.log()控制台打印输出</p><h2 id="2-分支语句"><a href="#2-分支语句" class="headerlink" title="2.分支语句"></a>2.分支语句</h2><p>if:单分支、双分支、多分支<br>三元运算符: 条件?满足条件执行的代码：不满足条件执行的代码</p><figure class="highlight javascript"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">switch</span> (变量)&#123;</span><br><span class="line">    <span class="keyword">case</span> <span class="string">&#x27;字符串&#x27;</span>或数字:</span><br><span class="line">    <span class="keyword">break</span></span><br><span class="line">    <span class="attr">default</span>:</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="3-循环语句"><a href="#3-循环语句" class="headerlink" title="3.循环语句"></a>3.循环语句</h2><p>while循环<br>作用：在满足条件期间，重复执行某些代码<br>三要素：变量起始值、终止条件（没有终止条件，循环会一直执行，造成死循环）、变量变化量（用自增或者自减）<br>for循环<br>for(变量起始值;终止条件;变量变化量){}</p><h3 id="循环退出"><a href="#循环退出" class="headerlink" title="循环退出"></a>循环退出</h3><p>break:退出整个循环<br>continue：退出此次循环继续下次循环</p><h2 id="4-断点调试"><a href="#4-断点调试" class="headerlink" title="4.断点调试"></a>4.断点调试</h2><p>f12打开开发者工具或打开调试页面<br>进入source<br>选择代码文件，设置断点,然后记得刷新界面</p><h1 id="三、操作数组"><a href="#三、操作数组" class="headerlink" title="三、操作数组"></a>三、操作数组</h1><h2 id="1-增"><a href="#1-增" class="headerlink" title="1.增"></a>1.增</h2><p>arr.push()将一个或多个元素加到数组末尾，并返回新长度<br>arr.unshift将一个或多个元素加到数组开头，并返回新长度</p><h2 id="2-删"><a href="#2-删" class="headerlink" title="2.删"></a>2.删</h2><p>arr.pop删除最后一个元素，返回删除的元素<br>arr.shift删除第一个元素，返回删除的元素<br>arr.splice删除指定元素<br>arr.splice(start,deleteCount)起始位置（从0开始计算），删除几个元素（默认删除到最后）</p><h2 id="3-改"><a href="#3-改" class="headerlink" title="3.改"></a>3.改</h2><h2 id="4-查"><a href="#4-查" class="headerlink" title="4.查"></a>4.查</h2><h1 id="基础语法03"><a href="#基础语法03" class="headerlink" title="基础语法03"></a>基础语法03</h1><h1 id="一、函数"><a href="#一、函数" class="headerlink" title="一、函数"></a>一、函数</h1><h2 id="1-作用：实现代码复用，提高开发效率"><a href="#1-作用：实现代码复用，提高开发效率" class="headerlink" title="1.作用：实现代码复用，提高开发效率"></a>1.作用：实现代码复用，提高开发效率</h2><h2 id="2-定义：function-用于执行特殊任务的代码块"><a href="#2-定义：function-用于执行特殊任务的代码块" class="headerlink" title="2.定义：function,用于执行特殊任务的代码块"></a>2.定义：function,用于执行特殊任务的代码块</h2><h1 id="二、函数使用"><a href="#二、函数使用" class="headerlink" title="二、函数使用"></a>二、函数使用</h1><h2 id="1-function-函数名"><a href="#1-function-函数名" class="headerlink" title="1.function 函数名(){}"></a>1.function 函数名(){}</h2><h2 id="2-函数名命名规范"><a href="#2-函数名命名规范" class="headerlink" title="2.函数名命名规范"></a>2.函数名命名规范</h2><p>和变量命名基本一致<br>尽量小驼峰式命名法<br>前缀应该为动词<br>命名建议：常用动词约定</p><h3 id="动词"><a href="#动词" class="headerlink" title="动词"></a>动词</h3><p>can判断是否可执行某个动作<br>has判断是否含义某个值<br>is判断是否为某个值<br>get获取某个值<br>set设置某个值<br>load加载某些数据</p><h2 id="3-调用"><a href="#3-调用" class="headerlink" title="3.调用"></a>3.调用</h2><p>函数名()</p><h1 id="三、函数传参"><a href="#三、函数传参" class="headerlink" title="三、函数传参"></a>三、函数传参</h1><h2 id="1-调用语法"><a href="#1-调用语法" class="headerlink" title="1.调用语法"></a>1.调用语法</h2><p>function 函数名(传递的参数){}<br>函数名(参数)</p><h2 id="2-形参与实参"><a href="#2-形参与实参" class="headerlink" title="2.形参与实参"></a>2.形参与实参</h2><p>形参：声明函数时写在函数名右边小括号里的叫形参（形式上的参数）<br>实参：调用函数时写在函数名右边小括号里的叫实参（实际上的参数）<br>形参可以理解为是在这个函数内声明的变量，实参可以理解为是给这个变量赋值<br>开发中尽量保持形参与实参个数一致</p><h2 id="3-参数默认值"><a href="#3-参数默认值" class="headerlink" title="3.参数默认值"></a>3.参数默认值</h2><p>当其中一个变量不给值，默认为undefined<br>当用户不输入实参，两个变量会出现undefined+undefined,结果为NaN<br>我们可以改进，给形参加默认值0，使程序更严谨</p><h1 id="四、函数返回值"><a href="#四、函数返回值" class="headerlink" title="四、函数返回值"></a>四、函数返回值</h1><h2 id="细节"><a href="#细节" class="headerlink" title="细节"></a>细节</h2><p>在函数体中使用return关键字能将内部的执行结果交给函数外部使用<br>return后面代码不会再被执行，会立即结束当前函数，所以return后面的数据不要换行写<br>return函数可以没有return,这种情况函数默认返回值为undefined<br>当想返回多个值时，可以使用数组，return [a,b]<br>两个相同的函数后面的会覆盖前面的函数<br>实参的个数和形参的个数可以不一致<br>如果形参过多会自动填上undefined(了解即可)<br>如果实参过多那么多余的实参会被忽略（函数内部有一个arguments,,里面装着所有的实参）<br>函数一旦碰到return就不会在往下执行了函数的结束用return</p><h1 id="五、作用域"><a href="#五、作用域" class="headerlink" title="五、作用域"></a>五、作用域</h1><h2 id="1-定义："><a href="#1-定义：" class="headerlink" title="1.定义："></a>1.定义：</h2><p>通常来说，一段程序代码中所用到的名字并不总是有效和可用的，而限定这个名字的可用性的代码范围就是这个名<br>字的作用域。</p><h2 id="2-作用"><a href="#2-作用" class="headerlink" title="2.作用"></a>2.作用</h2><p>增强了代码的可用性，减少名字的冲突</p><h2 id="3-变量类型"><a href="#3-变量类型" class="headerlink" title="3.变量类型"></a>3.变量类型</h2><p>根据作用域不同，变量可分为局部变量（只能在当前函数内部访问和修改）和全局变量（在人和区域都可以访问和修改）</p><h2 id="4-变量注意"><a href="#4-变量注意" class="headerlink" title="4.变量注意"></a>4.变量注意</h2><p>函数内部的形参可看作局部变量<br>函数内部没有声明却赋值的变量，可看作全局变量，但不提倡</p><h2 id="5-变量访问原则"><a href="#5-变量访问原则" class="headerlink" title="5.变量访问原则"></a>5.变量访问原则</h2><p>就近原则，谁近就输出谁</p><h1 id="六、匿名函数"><a href="#六、匿名函数" class="headerlink" title="六、匿名函数"></a>六、匿名函数</h1><h2 id="1-函数表达式"><a href="#1-函数表达式" class="headerlink" title="1.函数表达式"></a>1.函数表达式</h2><p>let fn&#x3D;function(){}<br>fn()<br>此时的变量名为函数名</p><h2 id="2-调用位置"><a href="#2-调用位置" class="headerlink" title="2.调用位置"></a>2.调用位置</h2><p>具名函数的调用可以写到任何位置，但匿名函数的调用只能在声明后写</p><h2 id="3-立即执行函数"><a href="#3-立即执行函数" class="headerlink" title="3.立即执行函数"></a>3.立即执行函数</h2><p>(function(){执行代码})();或者(function(){}());必须加分号，例如：(function(x,y){x+y})(1,2);</p><h1 id="七、逻辑中断"><a href="#七、逻辑中断" class="headerlink" title="七、逻辑中断"></a>七、逻辑中断</h1><p>短路：只存在于&amp;&amp;和‖中，当满足一定条件会让右边代码不执行<br>&amp;&amp;左边为false就短路<br>||左边为true就短路</p><h3 id="原因"><a href="#原因" class="headerlink" title="原因"></a>原因</h3><p>通过左边能得到整个式子的结果，因此没必要再判断右边</p><p>无论&amp;&amp;还是‖，运算结果都是最后被执行的表达式值，一般用在变量赋值</p>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;基础语法01&quot;&gt;&lt;a href=&quot;#基础语法01&quot; class=&quot;headerlink&quot; title=&quot;基础语法01&quot;&gt;&lt;/a&gt;基础语法01&lt;/h1&gt;&lt;h1 id=&quot;一、js简介&quot;&gt;&lt;a href=&quot;#一、js简介&quot; class=&quot;headerlink&quot; titl</summary>
      
    
    
    
    <category term="javascript" scheme="https://magic.thisis.host/categories/javascript/"/>
    
    
    <category term="javascript" scheme="https://magic.thisis.host/tags/javascript/"/>
    
  </entry>
  
  <entry>
    <title>链表练习</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0520/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0520/</id>
    <published>2024-05-20T09:20:29.000Z</published>
    <updated>2024-05-21T05:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="力扣LCR024"><a href="#力扣LCR024" class="headerlink" title="力扣LCR024"></a>力扣LCR024</h1><p>给定单链表的头节点 head ，请反转链表，并返回反转后的链表的头节点。</p><p>示例 1：</p><p>输入：head &#x3D; <code>[1,2,3,4,5]</code></p><p>输出：<code>[5,4,3,2,1]</code></p><p>示例 2：</p><p>输入：head &#x3D; <code>[1,2]</code></p><p>输出：<code>[2,1]</code></p><p>示例 3：</p><p>输入：head &#x3D; <code>[]</code></p><p>输出：<code>[]</code></p><p>提示：<br>链表中节点的数目范围是 [0, 5000]<br>-5000 &lt;&#x3D; Node.val &lt;&#x3D; 5000</p><h2 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h2><p>题目很容易理解，反转链表即可</p><h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用循环<br>首先设置一个空指针充当反转后的尾节点后的空值，然后使头节点指向空值，再依次移动指针，实现反转，注意，反转时要先设置一个指针来保存反转的下一个节点，否则会丢失此节点</p><h2 id="优化"><a href="#优化" class="headerlink" title="优化"></a>优化</h2><p>利用递归<br>首先判断是否只有一个节点<br>然后利用reverse的功能将head后的链表都反转，注意将head下一个节点指向的空指针指向head,再将head指向NULL</p><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">reverseList</span><span class="params">(ListNode* head)</span> </span>&#123;</span><br><span class="line">        ListNode*pre=<span class="literal">NULL</span>;</span><br><span class="line">        ListNode*cur=head;</span><br><span class="line">        <span class="keyword">while</span>(cur!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            ListNode*tmp=cur-&gt;next;</span><br><span class="line">            cur-&gt;next=pre;</span><br><span class="line">            pre=cur;</span><br><span class="line">            cur=tmp;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> pre;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣LCR136删除链表节点"><a href="#力扣LCR136删除链表节点" class="headerlink" title="力扣LCR136删除链表节点"></a>力扣LCR136删除链表节点</h1><p>给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。</p><p>返回删除后的链表的头节点。</p><p>示例 1:</p><p>输入: head &#x3D; <code>[4,5,1,9]</code>, val &#x3D; 5</p><p>输出: <code>[4,1,9]</code></p><p>解释: 给定你链表中值为 5 的第二个节点，那么在调用了你的函数之后，该链表应变为 4 -&gt; 1 -&gt; 9.</p><p>示例 2:</p><p>输入: head &#x3D; <code>[4,5,1,9]</code>, val &#x3D; 1</p><p>输出: <code>[4,5,9]</code></p><p>解释: 给定你链表中值为 1 的第三个节点，那么在调用了你的函数之后，该链表应变为 4 -&gt; 5 -&gt; 9.</p><p>说明：</p><p>题目保证链表中节点的值互不相同<br>若使用 C 或 C++ 语言，你不需要 free 或 delete 被删除的节点</p><h2 id="题目分析-1"><a href="#题目分析-1" class="headerlink" title="题目分析"></a>题目分析</h2><p>删除链表节点</p><h2 id="解题思路-1"><a href="#解题思路-1" class="headerlink" title="解题思路"></a>解题思路</h2><p>定位要被删除节点的前一个节点</p><h2 id="代码实现-1"><a href="#代码实现-1" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">deleteNode</span><span class="params">(ListNode* head, <span class="type">int</span> val)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span>(head-&gt;val==val)&#123;</span><br><span class="line">            <span class="keyword">return</span> head-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode*cur=head-&gt;next;</span><br><span class="line">        ListNode*pre=head;</span><br><span class="line">        <span class="keyword">while</span>(cur-&gt;val!=val&amp;&amp;cur!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            pre=cur;</span><br><span class="line">            cur=cur-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        pre-&gt;next=cur-&gt;next;</span><br><span class="line">        <span class="keyword">return</span> head;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣142环形链表"><a href="#力扣142环形链表" class="headerlink" title="力扣142环形链表"></a>力扣142环形链表</h1><p>给定一个链表的头节点 head ，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。</p><p>如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。如果 pos 是 -1，则在该链表中没有环。注意：pos 不作为参数进行传递，仅仅是为了标识链表的实际情况。</p><p>不允许修改 链表。</p><p>示例 1：</p><p>输入：head &#x3D; <code>[3,2,0,-4]</code>, pos &#x3D; 1</p><p>输出：返回索引为 1 的链表节点</p><p>解释：链表中有一个环，其尾部连接到第二个节点。</p><p>示例 2：</p><p>输入：head &#x3D; <code>[1,2]</code>, pos &#x3D; 0</p><p>输出：返回索引为 0 的链表节点</p><p>解释：链表中有一个环，其尾部连接到第一个节点。</p><p>示例 3：</p><p>输入：head &#x3D; <code>[1]</code>, pos &#x3D; -1</p><p>输出：返回 null</p><p>解释：链表中没有环。</p><h2 id="题目分析-2"><a href="#题目分析-2" class="headerlink" title="题目分析"></a>题目分析</h2><p>如果链表是环形链表，返回链表成环的入口，如果链表不是链表返回NULL</p><h2 id="解题思路-2"><a href="#解题思路-2" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用快慢指针，假如快指针比慢指针多走一个节点（其实只要比慢指针快即可），如果链表为环形，快慢指针一定会相遇<br>1找到相遇的节点<br>2我们会发现如果相遇节点和头节点同时走，相遇的节点就是环形的入口<br>原理：设置3个变量<br>x为头节点到链表入口的距离<br>y为入口到相遇节点的距离<br>z为入口到相遇节点的另一半距离<br>快指针比慢指针多走了n圈，所以慢指针路程为x+y,快指针为x+y+n(y+z),而快指针行走的路程是慢指针的2倍，可列出等式<br>整理得x&#x3D;(n-1)(y+z)+z,当n&#x3D;1时，x&#x3D;z，即头节点到链表入口的距离等于入口到相遇节点的另一半距离</p><h2 id="代码实现-2"><a href="#代码实现-2" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode *<span class="title">detectCycle</span><span class="params">(ListNode *head)</span> </span>&#123;</span><br><span class="line">        ListNode*slow=head;</span><br><span class="line">        ListNode*fast=head;</span><br><span class="line">        ListNode*pre=head;</span><br><span class="line">        <span class="keyword">while</span>(fast!=<span class="literal">NULL</span>&amp;&amp;fast-&gt;next!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            slow=slow-&gt;next;</span><br><span class="line">            fast=fast-&gt;next-&gt;next;</span><br><span class="line">            <span class="keyword">if</span>(slow==fast)&#123;</span><br><span class="line">                <span class="keyword">while</span>(pre!=fast)&#123;</span><br><span class="line">                    pre=pre-&gt;next;</span><br><span class="line">                    fast=fast-&gt;next;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">return</span> pre;</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">NULL</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣160相交链表"><a href="#力扣160相交链表" class="headerlink" title="力扣160相交链表"></a>力扣160相交链表</h1><p>给你两个单链表的头节点 headA 和 headB ，请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点，返回 null 。</p><p>图示两个链表在节点 c1 开始相交：</p><p>题目数据 保证 整个链式结构中不存在环。</p><p>注意，函数返回结果后，链表必须 保持其原始结构 。</p><p>示例 1：</p><p>输入：intersectVal &#x3D; 8, listA &#x3D; <code>[4,1,8,4,5]</code>, listB &#x3D; <code>[5,0,1,8,4,5]</code>, skipA &#x3D; 2, skipB &#x3D; 3</p><p>输出：Intersected at ‘8’</p><p>解释：相交节点的值为 8 （注意，如果两个链表相交则不能为 0）。<br>从各自的表头开始算起，链表 A 为 [4,1,8,4,5]，链表 B 为 [5,0,1,8,4,5]。<br>在 A 中，相交节点前有 2 个节点；在 B 中，相交节点前有 3 个节点。</p><p>示例 2：</p><p>输入：intersectVal &#x3D; 2, listA &#x3D; <code>[0,9,1,2,4]</code>, listB &#x3D; <code>[3,2,4]</code>, skipA &#x3D; 3, skipB &#x3D; 1<br>输出：Intersected at ‘2’<br>解释：相交节点的值为 2 （注意，如果两个链表相交则不能为 0）。<br>从各自的表头开始算起，链表 A 为 <code>[0,9,1,2,4]</code>，链表 B 为 <code>[3,2,4]</code>。<br>在 A 中，相交节点前有 3 个节点；在 B 中，相交节点前有 1 个节点。<br>示例 3：</p><p>输入：intersectVal &#x3D; 0, listA &#x3D; <code>[2,6,4]</code>, listB &#x3D; <code>[1,5]</code>, skipA &#x3D; 3, skipB &#x3D; 2<br>输出：null<br>解释：从各自的表头开始算起，链表 A 为 <code>[2,6,4]</code>，链表 B 为 <code>[1,5]</code>。<br>由于这两个链表不相交，所以 intersectVal 必须为 0，而 skipA 和 skipB 可以是任意值。<br>这两个链表不相交，因此返回 null 。</p><p>提示：</p><p>listA 中节点数目为 m<br>listB 中节点数目为 n<br>0 &lt;&#x3D; m, n &lt;&#x3D; 3 * 104<br>1 &lt;&#x3D; Node.val &lt;&#x3D; 105<br>0 &lt;&#x3D; skipA &lt;&#x3D; m<br>0 &lt;&#x3D; skipB &lt;&#x3D; n<br>如果 listA 和 listB 没有交点，intersectVal 为 0<br>如果 listA 和 listB 有交点，intersectVal &#x3D;&#x3D; listA[skipA + 1] &#x3D;&#x3D; listB[skipB + 1]</p><p>进阶：你能否设计一个时间复杂度 O(n) 、仅用 O(1) 内存的解决方案？</p><h2 id="题目分析-3"><a href="#题目分析-3" class="headerlink" title="题目分析"></a>题目分析</h2><p>找到链表指针相等的节点并返回数值<br>注意题目想要的是节点的指针对齐而不是对应的数值相等</p><h2 id="解题思路-3"><a href="#解题思路-3" class="headerlink" title="解题思路"></a>解题思路</h2><p>先找到链表从后对齐的点，再寻找相等的节点，返回节点<br>1计算两个链表的长度的差值，再利用while就可以定位链表长度相等的地方<br>2再遍历链表，遇到相等就返回</p><p>代码实现</p><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode *<span class="title">getIntersectionNode</span><span class="params">(ListNode *headA, ListNode *headB)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> len1=<span class="number">0</span>,len2=<span class="number">0</span>;</span><br><span class="line">        ListNode*curA=headA;</span><br><span class="line">        ListNode*curB=headB;</span><br><span class="line">        <span class="keyword">while</span>(curA!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            len1++;</span><br><span class="line">            curA=curA-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span>(curB!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            len2++;</span><br><span class="line">            curB=curB-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        curA=headA;</span><br><span class="line">        curB=headB;</span><br><span class="line">        <span class="keyword">if</span>(len2&gt;len1)&#123;</span><br><span class="line">            <span class="built_in">swap</span>(curA,curB);</span><br><span class="line">            <span class="built_in">swap</span>(len1,len2);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> c=len1-len2;</span><br><span class="line">        <span class="keyword">while</span>(c--)&#123;</span><br><span class="line">            curA=curA-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span>(curA!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span>(curA==curB)&#123;</span><br><span class="line">                <span class="keyword">return</span> curA;</span><br><span class="line">            &#125;</span><br><span class="line">            curA=curA-&gt;next;</span><br><span class="line">            curB=curB-&gt;next;</span><br><span class="line">        &#125;</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">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣234回文链表"><a href="#力扣234回文链表" class="headerlink" title="力扣234回文链表"></a>力扣234回文链表</h1><p>给你一个单链表的头节点 head ，请你判断该链表是否为<br>回文链表<br>。如果是，返回 true ；否则，返回 false 。</p><p>示例 1：</p><p>输入：head &#x3D; <code>[1,2,2,1]</code></p><p>输出：true</p><p>示例 2：</p><p>输入：head &#x3D; <code>[1,2]</code></p><p>输出：false</p><p>提示：</p><p>链表中节点数目在范围[1, 105] 内<br>0 &lt;&#x3D; Node.val &lt;&#x3D; 9</p><h2 id="题目分析-4"><a href="#题目分析-4" class="headerlink" title="题目分析"></a>题目分析</h2><p>判断一个链表是否为回文链表</p><h2 id="解题思路-4"><a href="#解题思路-4" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用快慢指针，快指针一次走两步，慢指针走一步，则当快指针为空时慢指针走到了中间节点，然后反转后半部分链表，再检查是否与前半部分链表匹配，最后将反转的链表反转回来</p><h2 id="代码实现-3"><a href="#代码实现-3" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isPalindrome</span><span class="params">(ListNode* head)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span>(head == <span class="literal">nullptr</span>)&#123;</span><br><span class="line">            <span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode* fast = head;</span><br><span class="line">        ListNode* slow = head;</span><br><span class="line">        <span class="keyword">while</span>(fast-&gt;next != <span class="literal">nullptr</span> &amp;&amp; fast-&gt;next-&gt;next != <span class="literal">nullptr</span>)&#123;</span><br><span class="line">            fast = fast-&gt;next-&gt;next;</span><br><span class="line">            slow = slow-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode* prev = <span class="literal">nullptr</span>;</span><br><span class="line">        ListNode* cur = slow-&gt;next;</span><br><span class="line">        <span class="keyword">while</span>(cur != <span class="literal">nullptr</span>)&#123;</span><br><span class="line">            ListNode* next = cur-&gt;next;</span><br><span class="line">            cur-&gt;next = prev;</span><br><span class="line">            prev = cur;</span><br><span class="line">            cur = next;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode* p1 = head;</span><br><span class="line">        ListNode* p2 = prev;</span><br><span class="line">        <span class="type">bool</span> result = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">while</span>(result &amp;&amp; p2 != <span class="literal">nullptr</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span>(p1-&gt;val != p2-&gt;val)&#123;</span><br><span class="line">                result = <span class="literal">false</span>;</span><br><span class="line">                <span class="keyword">break</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            p1 = p1-&gt;next;</span><br><span class="line">            p2 = p2-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode* prev2 = <span class="literal">nullptr</span>;</span><br><span class="line">        cur = prev;</span><br><span class="line">        <span class="keyword">while</span>(cur != <span class="literal">nullptr</span>)&#123;</span><br><span class="line">            ListNode* next = cur-&gt;next;</span><br><span class="line">            cur-&gt;next = prev2;</span><br><span class="line">            prev2 = cur;</span><br><span class="line">            cur = next;</span><br><span class="line">        &#125;</span><br><span class="line">        slow-&gt;next = prev2;</span><br><span class="line">        <span class="keyword">return</span> result;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣203移除链表"><a href="#力扣203移除链表" class="headerlink" title="力扣203移除链表"></a>力扣203移除链表</h1><p>给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val &#x3D;&#x3D; val 的节点，并返回 新的头节点 。</p><p>示例 1：</p><p>输入：head &#x3D; <code>[1,2,6,3,4,5,6]</code>, val &#x3D; 6<br>输出：<code>[1,2,3,4,5]</code><br>示例 2：</p><p>输入：head &#x3D; [], val &#x3D; 1<br>输出：[]<br>示例 3：</p><p>输入：head &#x3D; <code>[7,7,7,7]</code>, val &#x3D; 7<br>输出：[]</p><p>提示：</p><p>列表中的节点数目在范围 [0, 104] 内<br>1 &lt;&#x3D; Node.val &lt;&#x3D; 50<br>0 &lt;&#x3D; val &lt;&#x3D; 50</p><h2 id="题目分析-5"><a href="#题目分析-5" class="headerlink" title="题目分析"></a>题目分析</h2><p>删除链表中所有等于目标值的结点</p><h2 id="解题思路-5"><a href="#解题思路-5" class="headerlink" title="解题思路"></a>解题思路</h2><p>for循环遍历链表，找到目标值时移除链表节点，注意跳出循环条件</p><h2 id="优化-1"><a href="#优化-1" class="headerlink" title="优化"></a>优化</h2><p>因为头节点不为空，所以对于头结点的操作与其他节点不同<br>这时我们可以设置一个空的节点指向头节点，也就是虚拟头节点</p><h2 id="代码实现-4"><a href="#代码实现-4" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">removeElements</span><span class="params">(ListNode* head, <span class="type">int</span> val)</span> </span>&#123;</span><br><span class="line">       ListNode*dummyhead=<span class="keyword">new</span> <span class="built_in">ListNode</span>(<span class="number">0</span>);</span><br><span class="line">       dummyhead-&gt;next=head;</span><br><span class="line">       ListNode*cur=dummyhead;</span><br><span class="line">       <span class="keyword">while</span>(cur-&gt;next!=<span class="literal">NULL</span>)</span><br><span class="line">       &#123;</span><br><span class="line">        <span class="keyword">if</span>(cur-&gt;next-&gt;val==val)</span><br><span class="line">        &#123;</span><br><span class="line">            ListNode*tmp=cur-&gt;next;</span><br><span class="line">            cur-&gt;next=cur-&gt;next-&gt;next;</span><br><span class="line">            <span class="keyword">delete</span> tmp;</span><br><span class="line">        &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">            cur=cur-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">       &#125;</span><br><span class="line">       <span class="keyword">return</span> dummyhead-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣876链表的中间结点"><a href="#力扣876链表的中间结点" class="headerlink" title="力扣876链表的中间结点"></a>力扣876链表的中间结点</h1><p>给你单链表的头结点 head ，请你找出并返回链表的中间结点。</p><p>如果有两个中间结点，则返回第二个中间结点。</p><p>示例 1：</p><p>输入：head &#x3D; <code>[1,2,3,4,5]</code></p><p>输出：<code>[3,4,5]</code></p><p>解释：链表只有一个中间结点，值为 3 。</p><p>示例 2：</p><p>输入：head &#x3D; <code>[1,2,3,4,5,6]</code></p><p>输出：<code>[4,5,6]</code></p><p>解释：该链表有两个中间结点，值分别为 3 和 4 ，返回第二个结点。</p><h2 id="题目分析-6"><a href="#题目分析-6" class="headerlink" title="题目分析"></a>题目分析</h2><p> 若有一个中间结点则返回中间结点，若有两个中间结点，则返回第二个中间结点</p><h2 id="解题思路-6"><a href="#解题思路-6" class="headerlink" title="解题思路"></a>解题思路</h2><p> 先遍历链表求出链表长度，长度&#x2F;2就可到达中间结点，注意偶数结点返回的是中间的第二个结点</p><h2 id="代码实现-5"><a href="#代码实现-5" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">middleNode</span><span class="params">(ListNode* head)</span> </span>&#123;</span><br><span class="line">        ListNode*cur=head;</span><br><span class="line">        <span class="type">int</span> len=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span>(cur!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            len++;</span><br><span class="line">            cur=cur-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode*pre=head;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=len/<span class="number">2</span>;i&gt;<span class="number">0</span>;i--)&#123;</span><br><span class="line">                pre=pre-&gt;next;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">return</span> pre;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣21合并两个有序链表"><a href="#力扣21合并两个有序链表" class="headerlink" title="力扣21合并两个有序链表"></a>力扣21合并两个有序链表</h1><p> 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。</p><p>示例 1：</p><p>输入：l1 &#x3D; <code>[1,2,4]</code>, l2 &#x3D; <code>[1,3,4]</code></p><p>输出：<code>[1,1,2,3,4,4]</code></p><p>示例 2：</p><p>输入：l1 &#x3D;<code>[]</code>, l2 &#x3D; <code>[]</code></p><p>输出：<code>[]</code></p><p>示例 3：</p><p>输入：l1 &#x3D; <code>[]</code>, l2 &#x3D; <code>[0]</code></p><p>输出：<code>[0]</code></p><p>提示：</p><p>两个链表的节点数目范围是 [0, 50]<br>-100 &lt;&#x3D; Node.val &lt;&#x3D; 100<br>l1 和 l2 均按 非递减顺序 排列</p><h2 id="题目分析-7"><a href="#题目分析-7" class="headerlink" title="题目分析"></a>题目分析</h2><p>将两个有序链表合并为一个有序链表</p><h2 id="解题思路-7"><a href="#解题思路-7" class="headerlink" title="解题思路"></a>解题思路</h2><p>另外定义新链表，依次比较两个链表的值再存入<br>或直接使用递归将其拼接<br>问题：使用递归将返回l1还是l2呢？<br>随着递归使用，当有一个链表为空时，返回另外一个<br>注意：最后的判断条件不可为l1-&gt;val&gt;&#x3D;l2-&gt;next，因为必须要进入if else 语句，否则没有返回值，编译报错<br>如果新建链表则没有此问题</p><h2 id="代码实现-6"><a href="#代码实现-6" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">mergeTwoLists</span><span class="params">(ListNode* l1, ListNode* l2)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span>(l1==<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> l2;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(l2==<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> l1;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(l1-&gt;val&lt;l2-&gt;val)</span><br><span class="line">        &#123;</span><br><span class="line">            l1-&gt;next=<span class="built_in">mergeTwoLists</span>(l1-&gt;next,l2);</span><br><span class="line">            <span class="keyword">return</span> l1;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="comment">//不能写l1-&gt;next&gt;=l2-&gt;next</span></span><br><span class="line">        &#123;</span><br><span class="line">            l2-&gt;next=<span class="built_in">mergeTwoLists</span>(l1,l2-&gt;next);</span><br><span class="line">            <span class="keyword">return</span> l2;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;力扣LCR024&quot;&gt;&lt;a href=&quot;#力扣LCR024&quot; class=&quot;headerlink&quot; title=&quot;力扣LCR024&quot;&gt;&lt;/a&gt;力扣LCR024&lt;/h1&gt;&lt;p&gt;给定单链表的头节点 head ，请反转链表，并返回反转后的链表的头节点。&lt;/p&gt;
&lt;p&gt;示例</summary>
      
    
    
    
    <category term="算法" scheme="https://magic.thisis.host/categories/%E7%AE%97%E6%B3%95/"/>
    
    
    <category term="算法" scheme="https://magic.thisis.host/tags/%E7%AE%97%E6%B3%95/"/>
    
    <category term="数据结构" scheme="https://magic.thisis.host/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
  </entry>
  
  <entry>
    <title>动态规划</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0617/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0617/</id>
    <published>2024-05-20T09:20:29.000Z</published>
    <updated>2024-05-21T05:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="力扣740删除并获得整数"><a href="#力扣740删除并获得整数" class="headerlink" title="力扣740删除并获得整数"></a>力扣740删除并获得整数</h1><p>给你一个整数数组 nums ，你可以对它进行一些操作。</p><p>每次操作中，选择任意一个 nums[i] ，删除它并获得 nums[i] 的点数。之后，你必须删除 所有 等于 nums[i] - 1 和 nums[i] + 1 的元素。</p><p>开始你拥有 0 个点数。返回你能通过这些操作获得的最大点数。</p><p>示例 1：</p><p>输入：nums &#x3D; <code>[3,4,2]</code></p><p>输出：6</p><p>解释：<br>删除 4 获得 4 个点数，因此 3 也被删除。<br>之后，删除 2 获得 2 个点数。总共获得 6 个点数。</p><p>示例 2：</p><p>输入：nums &#x3D; <code>[2,2,3,3,3,4]</code></p><p>输出：9</p><p>解释：<br>删除 3 获得 3 个点数，接着要删除两个 2 和 4 。<br>之后，再次删除 3 获得 3 个点数，再次删除 3 获得 3 个点数。<br>总共获得 9 个点数。</p><p>提示：</p><p>1 &lt;&#x3D; nums.length &lt;&#x3D; 2 * 104<br>1 &lt;&#x3D; nums[i] &lt;&#x3D; 104</p><h2 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h2><p>选择一个任意点数nums[i]删除并获得他的点数，同时删除等于nums[i]+1和nums[i]-1的所有点数，此次删除并不能获得点数，即损失了他们的点数，求能获得的最大点数</p><h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用动态规划的思想<br>当我们选择了一个点数之后，要把这个点数都选完才能最大减少损失，并且这个点数的左右相邻点数都将损失，即我们不能选择连续的点数<br>听到这里大家有没有一丝熟悉的感觉，没错，与打家劫舍的问题类似</p><ol><li>首先我们求出数组中的最大点数，另定义一个数组sum用来存放每个点数与其出现次数的乘积</li><li>令定义一个函数与打家劫舍源码一样</li><li>将sum代入函数中，返回动态规划的值</li></ol><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">private</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">rob</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp;nums)</span></span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt;<span class="built_in">dp</span>(n<span class="number">+1</span>,<span class="number">0</span>);</span><br><span class="line">        dp[<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line">        dp[<span class="number">1</span>]=nums[<span class="number">0</span>];</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">2</span>;i&lt;=n;i++)</span><br><span class="line">        &#123;</span><br><span class="line">            dp[i]=<span class="built_in">max</span>(dp[i<span class="number">-1</span>],dp[i<span class="number">-2</span>]+nums[i<span class="number">-1</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n];</span><br><span class="line">    &#125;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">deleteAndEarn</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> maxval=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> val:nums)</span><br><span class="line">        &#123;</span><br><span class="line">            maxval=<span class="built_in">max</span>(maxval,val);</span><br><span class="line">        &#125;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt;<span class="built_in">sum</span>(maxval<span class="number">+1</span>);</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> val:nums)</span><br><span class="line">        &#123;</span><br><span class="line">            sum[val]+=val;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">rob</span>(sum);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣1173第N个泰波那契数"><a href="#力扣1173第N个泰波那契数" class="headerlink" title="力扣1173第N个泰波那契数"></a>力扣1173第N个泰波那契数</h1><p>泰波那契序列 Tn 定义如下： </p><p>T0 &#x3D; 0, T1 &#x3D; 1, T2 &#x3D; 1, 且在 n &gt;&#x3D; 0 的条件下 Tn+3 &#x3D; Tn + Tn+1 + Tn+2</p><p>给你整数 n，请返回第 n 个泰波那契数 Tn 的值。</p><p>示例 1：</p><p>输入：n &#x3D; 4</p><p>输出：4</p><p>解释：<br>T_3 &#x3D; 0 + 1 + 1 &#x3D; 2<br>T_4 &#x3D; 1 + 1 + 2 &#x3D; 4</p><p>示例 2：</p><p>输入：n &#x3D; 25</p><p>输出：1389537</p><p>提示：</p><p>0 &lt;&#x3D; n &lt;&#x3D; 37<br>答案保证是一个 32 位整数，即 answer &lt;&#x3D; 2^31 - 1。</p><h2 id="题目分析-1"><a href="#题目分析-1" class="headerlink" title="题目分析"></a>题目分析</h2><p>根据公式求得第n个数</p><h2 id="解题思路-1"><a href="#解题思路-1" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用动态规划的思想<br>注意数组越界的问题，初始化定义dp数组的大小要为n+3<br><strong>优化</strong>可以用滚动数组的思想</p><h2 id="代码实现-1"><a href="#代码实现-1" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">tribonacci</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt;<span class="built_in">dp</span>(n<span class="number">+3</span>,<span class="number">0</span>);</span><br><span class="line">        dp[<span class="number">0</span>]=<span class="number">0</span>;</span><br><span class="line">        dp[<span class="number">1</span>]=<span class="number">1</span>;</span><br><span class="line">        dp[<span class="number">2</span>]=<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">3</span>;i&lt;=n;i++)</span><br><span class="line">        &#123;</span><br><span class="line">            dp[i]=dp[i<span class="number">-1</span>]+dp[i<span class="number">-2</span>]+dp[i<span class="number">-3</span>];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dp[n];</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h2 id="代码优化"><a href="#代码优化" class="headerlink" title="代码优化"></a>代码优化</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line">    <span class="function"><span class="keyword">public</span> <span class="type">int</span> <span class="title">tribonacci</span><span class="params">(<span class="type">int</span> n)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (n == <span class="number">0</span>) &#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">if</span> (n &lt;= <span class="number">2</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">        <span class="type">int</span> p = <span class="number">0</span>, q = <span class="number">0</span>, r = <span class="number">1</span>, s = <span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">3</span>; i &lt;= n; ++i) &#123;</span><br><span class="line">            p = q;</span><br><span class="line">            q = r;</span><br><span class="line">            r = s;</span><br><span class="line">            s = p + q + r;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> s;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;力扣740删除并获得整数&quot;&gt;&lt;a href=&quot;#力扣740删除并获得整数&quot; class=&quot;headerlink&quot; title=&quot;力扣740删除并获得整数&quot;&gt;&lt;/a&gt;力扣740删除并获得整数&lt;/h1&gt;&lt;p&gt;给你一个整数数组 nums ，你可以对它进行一些操作。&lt;/p</summary>
      
    
    
    
    <category term="算法" scheme="https://magic.thisis.host/categories/%E7%AE%97%E6%B3%95/"/>
    
    
    <category term="算法" scheme="https://magic.thisis.host/tags/%E7%AE%97%E6%B3%95/"/>
    
    <category term="数据结构" scheme="https://magic.thisis.host/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
  </entry>
  
  <entry>
    <title>百度页面奔跑的白熊</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0516/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0516/</id>
    <published>2024-05-16T05:51:58.000Z</published>
    <updated>2024-05-18T05:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="一、相关知识-动画"><a href="#一、相关知识-动画" class="headerlink" title="一、相关知识-动画"></a>一、相关知识-动画</h1><h2 id="1-基本使用：先定义再调用"><a href="#1-基本使用：先定义再调用" class="headerlink" title="1.基本使用：先定义再调用"></a>1.基本使用：先定义再调用</h2><h2 id="2-动画使用步骤"><a href="#2-动画使用步骤" class="headerlink" title="2.动画使用步骤"></a>2.动画使用步骤</h2><h2 id="调用动画"><a href="#调用动画" class="headerlink" title="调用动画"></a>调用动画</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></pre></td><td class="code"><pre><span class="line"><span class="keyword">@keyframes</span>动画名称&#123;</span><br><span class="line">    <span class="number">0%</span>&#123;</span><br><span class="line">        <span class="attribute">width</span>:<span class="number">100px</span>；</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="number">100%</span>&#123;</span><br><span class="line">        <span class="attribute">width</span>:<span class="number">200px</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="使用动画"><a href="#使用动画" class="headerlink" title="使用动画"></a>使用动画</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></pre></td><td class="code"><pre><span class="line"><span class="selector-tag">div</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">height</span>:<span class="number">200px</span>;</span><br><span class="line">    <span class="attribute">background-color</span>:aqua;</span><br><span class="line">    <span class="attribute">margin</span>:<span class="number">100px</span> auto;</span><br><span class="line">    <span class="comment">/*调用动画*/</span></span><br><span class="line">    <span class="attribute">animation-name</span>:动画名称；</span><br><span class="line">    <span class="comment">/*持续时间*/</span></span><br><span class="line">    animation-duration:持续时间；单位必须为秒</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="3-动画"><a href="#3-动画" class="headerlink" title="3.动画"></a>3.动画</h2><h3 id="动画序列"><a href="#动画序列" class="headerlink" title="动画序列"></a>动画序列</h3><p>0%是动画的开始，100%是动画的完成。这样的规则就是动画序列。<br>在@keyframes中规定某项CSS样式，就能创建由当前样式逐渐改为新样式的动画效果。<br>动画是使元素从一种样式逐渐变化为另一种样式的效果。您可以改变任意多的样式任意多的次数。<br>请用百分比来规定变化发生的时间，百分号必须为整数，百分比的划分就是时间的分配，或用关键词”from”和”to”,等同于0%和100%</p><h3 id="动画属性"><a href="#动画属性" class="headerlink" title="动画属性"></a>动画属性</h3><p>@keyframes:规定动画<br>animation:所有动画属性的简写属性，除了animation-play-state属性。<br><strong>必需</strong>animation-name:规定@keyframes动画的名称。<br><strong>必需</strong>animation-duration:规定动画完成一个周期所花费的秒或毫秒，默认是0。<br>animation-timing-function:规定动画的速度曲线，默认是“ease”。<br>animation-delay:规定动画何时开始，默认是0。<br>animation-iteration-count:规定动画被播放的次数，默认是1，还有infinite<br>animation-direction:规定动画是否在下一周期逆向播放，默认是”normal”,alternatei逆播放<br>animation-play-state:规定动画是否正在运行或暂停。默认是”running”,还有”pause”。简写里不包括这项<br>animation-fill-mode:规定动画结束后状态，保持forwards 回到起始backwards<br><strong>简写：</strong><br>动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的状态；<br>animation:myfirst 5s linear 2s ifinite alternate forwards;</p><h1 id="二、相关案例-奔跑的白熊"><a href="#二、相关案例-奔跑的白熊" class="headerlink" title="二、相关案例-奔跑的白熊"></a>二、相关案例-奔跑的白熊</h1><h2 id="大致思路"><a href="#大致思路" class="headerlink" title="大致思路"></a>大致思路</h2><h3 id="1-html结构"><a href="#1-html结构" class="headerlink" title="1.html结构"></a>1.html结构</h3><p>放一个父盒子box和一个子盒子b,分别用于装背景山和白熊</p><h3 id="2-设计css样式："><a href="#2-设计css样式：" class="headerlink" title="2.设计css样式："></a>2.设计css样式：</h3><h4 id="先设置奔跑的熊-box-b"><a href="#先设置奔跑的熊-box-b" class="headerlink" title="先设置奔跑的熊.box .b"></a>先设置奔跑的熊.box .b</h4><p>由于熊为白色，给body背景一个颜色<br><strong>注意</strong>：熊一共走了8步，图片长为1600px，所以添加背景图片时只显示一个熊的片段长为200px<br><strong>让熊在原地跑</strong>：<br>定义bear动画：一共8步，每一步0.8s，无限重复跑步动作<br>调用bear动画：初始状态为step1，末尾状态为step8,整个背景图片往左移，所以背景移动值为负<br><strong>再让熊跑到视窗中央：</strong><br>定义move动画：走2.5s，走到终点停止<br>调用move动画：初始状态在最左侧，末尾状态在屏幕中央，先移动left一半，再移动熊所在盒子（版心）本身的一半即可到中间<br>同时调用两个动画实现跑到中间的熊</p><h4 id="再设置移动的山背景"><a href="#再设置移动的山背景" class="headerlink" title="再设置移动的山背景"></a>再设置移动的山背景</h4><p><strong>注意</strong>由于山背景的宽度为3840px，超出视窗宽度，所以我们给山盒子加宽度时为100%，加背景图片时要用repeat,否则会出现背景有一段为空白</p><p>定义mountain动画：走20s,匀速，无限<br>调用mountain动画：同熊原地跑动画原理相同</p><p>我们想让熊覆盖在山上跑动，就要给子盒子加绝对定位、父盒子加相对定位，并给熊加bottom:0,使它在山最下跑<br>但是此时会发现山和熊在视窗上半部分，给山也加bottom:0,并不能实现，因为山的定位不固定在视窗中，所以要将山的相对定位改为固定定位</p><h2 id="3-最终完整源码"><a href="#3-最终完整源码" class="headerlink" title="3.最终完整源码"></a>3.最终完整源码</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><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br></pre></td><td class="code"><pre><span class="line">&lt;!DOCTYPE <span class="selector-tag">html</span>&gt;</span><br><span class="line">&lt;<span class="selector-tag">html</span> lang=&quot;en&quot;&gt;</span><br><span class="line"></span><br><span class="line">&lt;head&gt;</span><br><span class="line">    &lt;meta charset=&quot;UTF-<span class="number">8</span>&quot;&gt;</span><br><span class="line">    &lt;meta name=&quot;viewport&quot; <span class="attribute">content</span>=&quot;<span class="attribute">width</span>=device-<span class="attribute">width</span>, initial-<span class="attribute">scale</span>=<span class="number">1.0</span>&quot;&gt;</span><br><span class="line">    &lt;title&gt;Document&lt;/title&gt;</span><br><span class="line">    &lt;style&gt;</span><br><span class="line">        <span class="selector-tag">body</span> &#123;</span><br><span class="line">            <span class="attribute">background-color</span>: <span class="number">#ccc</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="selector-class">.box</span> &#123;</span><br><span class="line">            <span class="attribute">bottom</span>: <span class="number">0</span>;</span><br><span class="line">            <span class="attribute">width</span>: <span class="number">100%</span>;</span><br><span class="line">            <span class="attribute">height</span>: <span class="number">336px</span>;</span><br><span class="line">            <span class="attribute">position</span>: fixed;</span><br><span class="line">            <span class="attribute">background</span>: <span class="built_in">url</span>(<span class="string">image/bg1\(1\</span>).png) repeat;</span><br><span class="line">            <span class="attribute">animation</span>: mountain <span class="number">20s</span> linear infinite;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="selector-class">.box</span> <span class="selector-class">.b</span> &#123;</span><br><span class="line">            <span class="attribute">bottom</span>: <span class="number">0</span>;</span><br><span class="line">            <span class="attribute">position</span>: absolute;</span><br><span class="line">            <span class="attribute">width</span>: <span class="number">200px</span>;</span><br><span class="line">            <span class="attribute">height</span>: <span class="number">100px</span>;</span><br><span class="line">            <span class="attribute">background</span>: <span class="built_in">url</span>(<span class="string">image/bear\(1\</span>).png) no-repeat;</span><br><span class="line">            <span class="attribute">animation</span>: bear <span class="number">0.8s</span> <span class="built_in">steps</span>(<span class="number">8</span>) infinite, move <span class="number">2.5s</span> forwards;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">@keyframes</span> bear &#123;</span><br><span class="line">            <span class="number">0%</span> &#123;</span><br><span class="line">                <span class="attribute">background-position</span>: <span class="number">0</span>;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="number">100%</span> &#123;</span><br><span class="line">                <span class="attribute">background-position</span>: -<span class="number">1600px</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="keyword">@keyframes</span> move &#123;</span><br><span class="line">            <span class="number">0%</span> &#123;</span><br><span class="line">                <span class="attribute">left</span>: <span class="number">0</span>;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="number">100%</span> &#123;</span><br><span class="line">                <span class="attribute">left</span>: <span class="number">50%</span>;</span><br><span class="line">                <span class="attribute">margin-left</span>: -<span class="number">100px</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="keyword">@keyframes</span> mountain &#123;</span><br><span class="line">            <span class="number">0%</span> &#123;</span><br><span class="line">                <span class="attribute">background-position</span>: <span class="number">0</span>;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="number">100%</span> &#123;</span><br><span class="line">                <span class="attribute">background-position</span>: -<span class="number">3840px</span> <span class="number">0</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &lt;/style&gt;</span><br><span class="line">&lt;/head&gt;</span><br><span class="line"></span><br><span class="line">&lt;<span class="selector-tag">body</span>&gt;</span><br><span class="line">    &lt;<span class="selector-tag">div</span> class=&quot;box&quot;&gt;</span><br><span class="line">        &lt;<span class="selector-tag">div</span> class=&quot;<span class="selector-tag">b</span>&quot;&gt;&lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">    &lt;/<span class="selector-tag">div</span>&gt;</span><br><span class="line">&lt;/<span class="selector-tag">body</span>&gt;</span><br><span class="line"></span><br><span class="line">&lt;/<span class="selector-tag">html</span>&gt;</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;h2 id=&quot;1-基本使用：先定义再调用&quot;&gt;&lt;a href=&quot;#1-基本使用：先定义再调</summary>
      
    
    
    
    <category term="css" scheme="https://magic.thisis.host/categories/css/"/>
    
    
    <category term="css" scheme="https://magic.thisis.host/tags/css/"/>
    
    <category term="css动画，页面练习" scheme="https://magic.thisis.host/tags/css%E5%8A%A8%E7%94%BB%EF%BC%8C%E9%A1%B5%E9%9D%A2%E7%BB%83%E4%B9%A0/"/>
    
  </entry>
  
  <entry>
    <title>css基础之盒子模型、浮动问题</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0505/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0505/</id>
    <published>2024-05-05T13:03:58.000Z</published>
    <updated>2024-05-06T05:14:09.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="盒子模型"><a href="#盒子模型" class="headerlink" title="盒子模型"></a>盒子模型</h1><h1 id="一、盒子模型的组成"><a href="#一、盒子模型的组成" class="headerlink" title="一、盒子模型的组成"></a>一、盒子模型的组成</h1><p>border边框、content内容、padding内边距、margin外边距(与另外盒子的距离)</p><h2 id="1-边框"><a href="#1-边框" class="headerlink" title="1.边框"></a>1.边框</h2><p>border-width<br>border-style: solid实线 border-style: dashed虚线 border-style: dotted点线<br>border-color</p><p>border: 1pxx solid pink;复合写法，无顺序<br>border-top上边框border-bottom下边框border-left左边框border-right右边框<br>border-collapse: collapse表示相邻边框合到一起</p><h2 id="2-内边距padding"><a href="#2-内边距padding" class="headerlink" title="2.内边距padding"></a>2.内边距padding</h2><p>如果盒子已经有了大小，再加内边距，盒子会变大<br>如果没有指定宽度，加内边距，盒子不变<br>padding-left: 10px (right,top,bottom)<br>复合写法：padding: 1px;<br>一个值：上下左右<br>两个值：上下，左右<br>三个值：上，下，左右<br>四个值：上，右，下，左，顺时针</p><h2 id="3-外边距margin"><a href="#3-外边距margin" class="headerlink" title="3.外边距margin"></a>3.外边距margin</h2><p>可以让盒子水平居中但要满足两个条件：<br>必须指定宽度，左右外边距都设置为auto<br>常用：magin:0,auto;<br>注意：让行内元素或行内块元素水平居中只需给父元素添加text-align: center;<br>塌陷问题：对于嵌套的父子块元素，当父元素有上外边距子元素也有上外边距，父元素会塌陷较大的外边距值<br>三种解决方法：<br>给父元素定义上边框<br>给父元素定义上内边距<br>为父元素添加overflow:hidden</p><h2 id="4-清除内外边距-一般是css代码的第一句"><a href="#4-清除内外边距-一般是css代码的第一句" class="headerlink" title="4.清除内外边距(一般是css代码的第一句)"></a>4.清除内外边距(一般是css代码的第一句)</h2><p><code>*</code> {<br>    padding: 0;<br>    margin: 0;<br>}</p><p><strong>注意</strong>：行内元素为了照顾兼容性尽量只设置左右边距，不要设置上下，但转换为块级或行内块就可以了</p><h1 id="二、ps基本操作"><a href="#二、ps基本操作" class="headerlink" title="二、ps基本操作"></a>二、ps基本操作</h1><p>文件，打开：可以打开要测量的图片<br>ctrl+R:可以打开标尺（视图+标尺）<br>ctrl+放大ctrl-缩小<br>空格键变小手，可以拖动ps视图<br>选区工具测量大小，空白处点击取消选区</p><h1 id="三、圆角边框"><a href="#三、圆角边框" class="headerlink" title="三、圆角边框"></a>三、圆角边框</h1><h2 id="1-圆角边框的原理"><a href="#1-圆角边框的原理" class="headerlink" title="1.圆角边框的原理"></a>1.圆角边框的原理</h2><p>border-radius: length;length为四个角圆的半径，值越大，弧线越大</p><h2 id="2-圆角边框的使用"><a href="#2-圆角边框的使用" class="headerlink" title="2.圆角边框的使用"></a>2.圆角边框的使用</h2><p>将正方形改为圆形：<br>border-radius: 边长<em>50%px;<br>将长方形改为椭圆：<br>border1-radius: 短边</em>50%px;</p><p>可以设置不同的圆角：<br>border-radius: 左上右上右下左下；从左上开始顺时针<br>或者：<br>border-top-left-radius<br>border-top-right-radius<br>border-bottom-left-radius<br>border-bottom-right-radius</p><h1 id="四、盒子阴影box-shadow"><a href="#四、盒子阴影box-shadow" class="headerlink" title="四、盒子阴影box-shadow"></a>四、盒子阴影box-shadow</h1><p>h-shadow:必需，水平阴影，负值左移正值右移<br>v-shadow:必需，垂直阴影，负值上移，正值下移<br>blur:模糊距离（为0时影子为实）<br>spread:阴影的尺寸<br>color：一般为rgba(0,0,0,0.3)30%的黑色<br>insert:将外阴影改为内阴影</p><p>注意：盒子阴影不占用空间，不影响排列<br>使鼠标经停盒子才出现阴影</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><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;style&gt;</span><br><span class="line">    <span class="selector-tag">div</span><span class="selector-pseudo">:hover</span> &#123;</span><br><span class="line">        <span class="attribute">box-shadow</span>:<span class="number">10px</span> <span class="number">10px</span> <span class="number">10px</span> -<span class="number">4px</span> <span class="built_in">rgba</span>(<span class="number">0</span>,<span class="number">0</span>,<span class="number">0</span>,<span class="number">0.3</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&lt;/style&gt;</span><br></pre></td></tr></table></figure><h1 id="五、文字阴影text-shadow"><a href="#五、文字阴影text-shadow" class="headerlink" title="五、文字阴影text-shadow"></a>五、文字阴影text-shadow</h1><p>h-shadow:必需，水平阴影，负值左移正值右移<br>v-shadow:必需，垂直阴影，负值上移，正值下移<br>blur:模糊距离<br>color：一般为rgba(0,0,0,0.3)30%的黑色</p><h1 id="浮动问题"><a href="#浮动问题" class="headerlink" title="浮动问题"></a>浮动问题</h1><h1 id="一、浮动基本定义"><a href="#一、浮动基本定义" class="headerlink" title="一、浮动基本定义"></a>一、浮动基本定义</h1><h2 id="1-定义"><a href="#1-定义" class="headerlink" title="1.定义"></a>1.定义</h2><p>float属性用于创建浮动窗，将其移动一边，直到左边缘或右边缘触及包含块或另一个浮动窗的边缘</p><h2 id="2-语法"><a href="#2-语法" class="headerlink" title="2.语法"></a>2.语法</h2><p>选择器{<br>    float:属性；<br>}<br>属性：none不浮动,left向左浮动,right向右浮动;</p><h1 id="二、浮动特性"><a href="#二、浮动特性" class="headerlink" title="二、浮动特性"></a>二、浮动特性</h1><h2 id="1-最重要特性"><a href="#1-最重要特性" class="headerlink" title="1.最重要特性"></a>1.最重要特性</h2><p>脱标：脱离标准普通流的控制移动到指定位置<br>浮动的盒子不再保留原先的位置</p><h2 id="2-如果多个盒子都加了浮动特性，那么所有盒子都在一行内显示，没有空隙，且顶端对齐"><a href="#2-如果多个盒子都加了浮动特性，那么所有盒子都在一行内显示，没有空隙，且顶端对齐" class="headerlink" title="2.如果多个盒子都加了浮动特性，那么所有盒子都在一行内显示，没有空隙，且顶端对齐"></a>2.如果多个盒子都加了浮动特性，那么所有盒子都在一行内显示，没有空隙，且顶端对齐</h2><h2 id="3-浮动元素具有行内块元素特性"><a href="#3-浮动元素具有行内块元素特性" class="headerlink" title="3.浮动元素具有行内块元素特性"></a>3.浮动元素具有行内块元素特性</h2><p>任何元素在添加浮动特性都可以浮动<br>注意：如果块级元素没有设置宽度，默认宽度和父级一样宽，但是添加浮动后，它的大小根据内容决定</p><h2 id="4-注意："><a href="#4-注意：" class="headerlink" title="4.注意："></a>4.注意：</h2><p>浮动元素经常和标准流父级搭配使用：先用标准流的父级排列上下位置，再用子级采用浮动排列左右位置<br>一个元素浮动，理论上其它兄弟元素跟着浮动：浮动的盒子只会影响后面的标准流</p><h2 id="5-为什么要清除浮动"><a href="#5-为什么要清除浮动" class="headerlink" title="5.为什么要清除浮动"></a>5.为什么要清除浮动</h2><p>当子盒子元素较多，或文字较多，不方便给父盒子的高度时，我们想要有多少子元素就撑开父元素</p><h2 id="6-清除浮动本质"><a href="#6-清除浮动本质" class="headerlink" title="6.清除浮动本质"></a>6.清除浮动本质</h2><p>清除浮动的本质是清除浮动元素的影响<br>如果父盒子本身有高度，则不需要清除浮动<br>清除浮动之后，父级会根据浮动的子盒子自动检测高度，父级有了高度就不会影响下面的标准流<br>选择器{clear:属性值；}<br>属性值：left,right,both(几乎只用both)</p><h2 id="7-清除浮动的方法"><a href="#7-清除浮动的方法" class="headerlink" title="7.清除浮动的方法"></a>7.清除浮动的方法</h2><p>额外标签法：在最后一个浮动盒子后添加一个空的块级标签(或者<code>&lt;/br&gt;</code>)<br>例如：<code>&lt;div class=&quot;qingchu&quot;&gt; &lt;/div&gt;,调用.qingchu&#123;clear:both;&#125;</code><br>父级添加overflow属性：将其属性值设置为hidden或auto或scroll<br>父级添加after伪元素</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><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">.clearfix</span><span class="selector-pseudo">:after</span>&#123;</span><br><span class="line">    <span class="attribute">content</span>: <span class="string">&quot;&quot;</span>;</span><br><span class="line">    <span class="attribute">display</span>: block;</span><br><span class="line">    <span class="attribute">height</span>: <span class="number">0</span>;</span><br><span class="line">    <span class="attribute">clear</span>: both;</span><br><span class="line">    <span class="attribute">visibility</span>: hidden;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.clearfix</span> &#123;</span><br><span class="line">    *<span class="attribute">zoom</span>: <span class="number">1</span>;<span class="comment">/*zoom照顾I6I7低版本的浏览器*/</span></span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><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><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">.clearfix</span><span class="selector-pseudo">:before</span>,<span class="selector-class">.clearfix</span><span class="selector-pseudo">:after</span>&#123;</span><br><span class="line">    <span class="attribute">content</span>: <span class="string">&quot;&quot;</span>;</span><br><span class="line">    <span class="attribute">display</span>: table;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.clearfix</span> &#123;</span><br><span class="line">    <span class="attribute">clear</span>:both;</span><br><span class="line">&#125;</span><br><span class="line"><span class="selector-class">.clearfix</span> &#123;</span><br><span class="line">    *<span class="attribute">zoom</span>: <span class="number">1</span>;</span><br><span class="line">&#125;</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;h1 id=&quot;一、盒子模型的组成&quot;&gt;&lt;a href=&quot;#一、盒子模型的组成&quot; class=&quot;headerlink&quot; title=</summary>
      
    
    
    
    <category term="css" scheme="https://magic.thisis.host/categories/css/"/>
    
    
    <category term="css" scheme="https://magic.thisis.host/tags/css/"/>
    
    <category term="学习笔记" scheme="https://magic.thisis.host/tags/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
    
  </entry>
  
  <entry>
    <title>移动应用开发实验室大一上考核题分析</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0422/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0422/</id>
    <published>2024-04-21T09:20:09.000Z</published>
    <updated>2024-04-22T05:44:36.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="力扣125验证回文串"><a href="#力扣125验证回文串" class="headerlink" title="力扣125验证回文串"></a>力扣125验证回文串</h1><p>如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后，短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。</p><p>字母和数字都属于字母数字字符。</p><p>给你一个字符串 s，如果它是 回文串 ，返回 true ；否则，返回 false 。</p><p>示例 1：</p><p>输入:s &#x3D; “A man, a plan, a canal: Panama”<br>输出：true<br>解释：”amanaplanacanalpanama” 是回文串。</p><p>示例 2：</p><p>输入：s &#x3D; “race a car”<br>输出：false<br>解释：”raceacar” 不是回文串。</p><p>示例 3：</p><p>输入：s &#x3D; “ “<br>输出：true<br>解释：在移除非字母数字字符之后，s 是一个空字符串 “” 。<br>由于空字符串正着反着读都一样，所以是回文串。</p><h2 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h2><p>将所有大写字符转换为小写字符、并移除所有非字母数字字符之后，短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。</p><h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用快慢指针遍历字符串，用isalnum函数判断字符串里是否是数字或字母，当遇到大写字母时转化为小写，一旦不相等返回false，直至快慢指针相遇，跳出循环</p><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isPalindrome</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> j=s.<span class="built_in">size</span>()<span class="number">-1</span>;</span><br><span class="line">        <span class="type">int</span> i=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">while</span>(i&lt;j)</span><br><span class="line">        &#123;</span><br><span class="line">           <span class="keyword">while</span> (!<span class="built_in">isalnum</span>(s[i])&amp;&amp;i&lt;j)</span><br><span class="line">            &#123;</span><br><span class="line">               i++;</span><br><span class="line">            &#125;</span><br><span class="line">                <span class="keyword">if</span>(s[i]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[i]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">                &#123;</span><br><span class="line">                    s[i]=s[i]<span class="number">+32</span>;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">while</span>(!<span class="built_in">isalnum</span>(s[j])&amp;&amp;i&lt;j)</span><br><span class="line">                &#123;</span><br><span class="line">                    j--;</span><br><span class="line">                &#125;</span><br><span class="line">                    <span class="keyword">if</span>(s[j]&gt;=<span class="string">&#x27;A&#x27;</span>&amp;&amp;s[j]&lt;=<span class="string">&#x27;Z&#x27;</span>)</span><br><span class="line">                    &#123;</span><br><span class="line">                        s[j]=s[j]<span class="number">+32</span>;</span><br><span class="line">                    &#125;</span><br><span class="line">                    <span class="keyword">if</span>(s[i]==s[j])</span><br><span class="line">                    &#123;</span><br><span class="line">                        i++;</span><br><span class="line">                        j--;</span><br><span class="line">                    &#125;</span><br><span class="line">                    <span class="keyword">else</span>&#123;<span class="keyword">return</span> <span class="literal">false</span>;&#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><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣73矩阵置零"><a href="#力扣73矩阵置零" class="headerlink" title="力扣73矩阵置零"></a>力扣73矩阵置零</h1><p>给定一个 m x n 的矩阵，如果一个元素为 0 ，则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。</p><p>示例 1：</p><p>输入：matrix &#x3D; <code>[[1,1,1],[1,0,1],[1,1,1]]</code><br>输出：<code>[[1,0,1],[0,0,0],[1,0,1]]</code></p><p>示例 2：</p><p>输入：matrix &#x3D; <code>[[0,1,2,0],[3,4,5,2],[1,3,1,5]]</code><br>输出：<code>[[0,0,0,0],[0,4,5,0],[0,3,1,0]]</code></p><p>提示：</p><p>m &#x3D;&#x3D; matrix.length<br>n &#x3D;&#x3D; matrix[0].length<br>1 &lt;&#x3D; m, n &lt;&#x3D; 200<br>-231 &lt;&#x3D; matrix[i][j] &lt;&#x3D; 231 - 1</p><h2 id="题目分析-1"><a href="#题目分析-1" class="headerlink" title="题目分析"></a>题目分析</h2><p>给定一个矩阵，当矩阵出现0时，0所在的行与列都置0</p><h2 id="解题思路-1"><a href="#解题思路-1" class="headerlink" title="解题思路"></a>解题思路</h2><p>在双重循环中利用两个数组标记矩阵中0所在的行与列<br>再利用双重循环，如果有标记，那么那一行与列都置零</p><h2 id="代码实现-1"><a href="#代码实现-1" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">setZeroes</span><span class="params">(vector&lt;vector&lt;<span class="type">int</span>&gt;&gt;&amp; matrix)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> m = matrix.<span class="built_in">size</span>();</span><br><span class="line">        <span class="type">int</span> n = matrix[<span class="number">0</span>].<span class="built_in">size</span>();</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt;<span class="built_in">row</span>(m),<span class="built_in">col</span>(n);</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span>(matrix[i][j]==<span class="number">0</span>)&#123;</span><br><span class="line">                row[i]=col[j]=<span class="literal">true</span>;</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">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;m;i++)&#123;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;n;j++)&#123;</span><br><span class="line">                <span class="keyword">if</span>(row[i]||col[j])&#123;</span><br><span class="line">                    matrix[i][j]=<span class="number">0</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣21合并两个有序链表"><a href="#力扣21合并两个有序链表" class="headerlink" title="力扣21合并两个有序链表"></a>力扣21合并两个有序链表</h1><p>将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 </p><p>示例 1：</p><p>输入：l1 &#x3D; <code>[1,2,4]</code>, l2 &#x3D; <code>[1,3,4]</code><br>输出：<code>[1,1,2,3,4,4]</code></p><p>示例 2：</p><p>输入：l1 &#x3D; <code>[]</code>, l2 &#x3D; <code>[]</code><br>输出：[]</p><p>示例 3：</p><p>输入：l1 &#x3D; <code>[]</code>, l2 &#x3D; <code>[0]</code><br>输出：<code>[0]</code></p><p>提示：</p><p>两个链表的节点数目范围是 [0, 50]<br>-100 &lt;&#x3D; Node.val &lt;&#x3D; 100<br>l1 和 l2 均按 非递减顺序 排列</p><h2 id="题目分析-2"><a href="#题目分析-2" class="headerlink" title="题目分析"></a>题目分析</h2><p>将两个有序链表合并为一个有序链表</p><h2 id="解题思路-2"><a href="#解题思路-2" class="headerlink" title="解题思路"></a>解题思路</h2><p>另外定义新链表，依次比较两个链表的值再存入<br>或直接使用递归将其拼接<br>问题：使用递归将返回l1还是l2呢？<br>随着递归使用，当有一个链表为空时，返回另外一个<br>注意：最后的判断条件不可为l1-&gt;val&gt;&#x3D;l2-&gt;next，因为必须要进入if else 语句，否则没有返回值，编译报错<br>如果新建链表则没有此问题</p><h2 id="代码实现-2"><a href="#代码实现-2" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">mergeTwoLists</span><span class="params">(ListNode* l1, ListNode* l2)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span>(l1==<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> l2;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(l2==<span class="literal">NULL</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">return</span> l1;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="keyword">if</span>(l1-&gt;val&lt;l2-&gt;val)</span><br><span class="line">        &#123;</span><br><span class="line">            l1-&gt;next=<span class="built_in">mergeTwoLists</span>(l1-&gt;next,l2);</span><br><span class="line">            <span class="keyword">return</span> l1;</span><br><span class="line">        &#125;<span class="keyword">else</span> <span class="comment">//不能写l1-&gt;next&gt;=l2-&gt;next</span></span><br><span class="line">        &#123;</span><br><span class="line">            l2-&gt;next=<span class="built_in">mergeTwoLists</span>(l1,l2-&gt;next);</span><br><span class="line">            <span class="keyword">return</span> l2;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣147对链表进行插入排序"><a href="#力扣147对链表进行插入排序" class="headerlink" title="力扣147对链表进行插入排序"></a>力扣147对链表进行插入排序</h1><p>给定单个链表的头 head ，使用 插入排序 对链表进行排序，并返回 排序后链表的头 。</p><p>插入排序 算法的步骤:</p><p>插入排序是迭代的，每次只移动一个元素，直到所有元素可以形成一个有序的输出列表。<br>每次迭代中，插入排序只从输入数据中移除一个待排序的元素，找到它在序列中适当的位置，并将其插入。<br>重复直到所有输入数据插入完为止。<br>下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时，从输入数据中删除一个元素(红色)，并就地插入已排序的列表中。</p><p>对链表进行插入排序。</p><p>示例 1：</p><p>输入: head &#x3D; [4,2,1,3]<br>输出: [1,2,3,4]</p><p>示例 2：</p><p>输入: head &#x3D; [-1,5,3,4,0]<br>输出: [-1,0,3,4,5]</p><p>提示：</p><p>列表中的节点数在 [1, 5000]范围内<br>-5000 &lt;&#x3D; Node.val &lt;&#x3D; 5000</p><h2 id="题目分析-3"><a href="#题目分析-3" class="headerlink" title="题目分析"></a>题目分析</h2><p>对链表进行插入排序<br>插入排序：从数组（链表）的第一个数开始，每次遍历数组寻找合适位置，直至数组的最后一个数排序完</p><h2 id="解题思路-3"><a href="#解题思路-3" class="headerlink" title="解题思路"></a>解题思路</h2><p>因为有可能在头结点之前插入结点，所以我们要设计一个虚拟头结点便于操作<br>首先设计三个指针<br>p记录要改变的结点位置<br>q记录改变结点的下一个位置，防止丢失结点<br>pre记录虚拟头结点，实现每一次遍历链表<br>然后<br>1.当p的值小于等于q的值就不需要移动结点，同时将p,q指向的结点位置向后移一位<br>2.当p的值大于q时，pre指针遍历链表，寻找第一个大于p值的结点，并将pre放在此节点的前一个位置，便于插入</p><h2 id="代码实现-3"><a href="#代码实现-3" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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 class="comment">/**</span></span><br><span class="line"><span class="comment"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode() : val(0), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x, ListNode *next) : val(x), next(next) &#123;&#125;</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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">insertionSortList</span><span class="params">(ListNode* head)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (head == <span class="literal">nullptr</span>) &#123;</span><br><span class="line">            <span class="keyword">return</span> head;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode*dummy=<span class="keyword">new</span> <span class="built_in">ListNode</span>(<span class="number">0</span>);</span><br><span class="line">        dummy-&gt;next=head;</span><br><span class="line">        ListNode*cur=dummy;</span><br><span class="line">        ListNode*p=head;</span><br><span class="line">        ListNode*q=head-&gt;next;</span><br><span class="line">        <span class="keyword">while</span>(q!=<span class="literal">NULL</span>)&#123;</span><br><span class="line">            <span class="keyword">if</span>(p-&gt;val&lt;=q-&gt;val)&#123;</span><br><span class="line">                p=p-&gt;next;</span><br><span class="line">            &#125;<span class="keyword">else</span> &#123;</span><br><span class="line">                ListNode*pre=dummy;</span><br><span class="line">                <span class="keyword">while</span>(pre-&gt;next-&gt;val&lt;=q-&gt;val)&#123;</span><br><span class="line">                    pre=pre-&gt;next;</span><br><span class="line">                &#125;</span><br><span class="line">                p-&gt;next=q-&gt;next;</span><br><span class="line">                q-&gt;next=pre-&gt;next;</span><br><span class="line">                pre-&gt;next=q;</span><br><span class="line">            &#125;</span><br><span class="line">            q=p-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> dummy-&gt;next;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣309买卖股票的最佳时期含冷冻时期"><a href="#力扣309买卖股票的最佳时期含冷冻时期" class="headerlink" title="力扣309买卖股票的最佳时期含冷冻时期"></a>力扣309买卖股票的最佳时期含冷冻时期</h1><p>给定一个整数数组prices，其中第  prices[i] 表示第 i 天的股票价格 。​</p><p>设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:</p><p>卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。<br>注意：你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。</p><p>示例 1:</p><p>输入: prices &#x3D; <code>[1,2,3,0,2]</code><br>输出: 3<br>解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]</p><p>示例 2:</p><p>输入: prices &#x3D; <code>[1]</code><br>输出: 0</p><p>提示：</p><p>1 &lt;&#x3D; prices.length &lt;&#x3D; 5000<br>0 &lt;&#x3D; prices[i] &lt;&#x3D; 1000</p><h2 id="题目分析-4"><a href="#题目分析-4" class="headerlink" title="题目分析"></a>题目分析</h2><p>求得卖出股票的最大利益，由于冷冻期的存在，不能连续两天对股票进行操作，并且手里最多只能持有一只股票</p><h2 id="解题思路-4"><a href="#解题思路-4" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用动态规划和贪心的思想<br>f[i][0]: 手上持有股票的最大收益<br>f[i][1]: 手上不持有股票，并且处于冷冻期中的累计最大收益<br>f[i][2]: 手上不持有股票，并且不在冷冻期中的累计最大收益<br>对f[i][0]分析：1.第i天无操作，最大收益为第i-1天 2.第i天买入股票那么第i-1天不持有股票且不能进入冷冻期<br>f[i][0]&#x3D;max(f[i-1][0],f[i-1][2]-prices[i])<br>对f[i][1]分析：处于冷冻期所以第i天卖出了股票<br>f[i][1]&#x3D;f[i-1][0]+prices[i]<br>对f[i][2]分析：第i天不在冷冻期所以第i-1天没操作，又不持有股票，所以第i-1天也没有股票，那么取第i-1天在不在冷冻期的最大值<br>f[i][2]&#x3D;max(f[i−1][1],f[i−1][2])</p><h2 id="代码实现-4"><a href="#代码实现-4" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maxProfit</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; prices)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> (prices.<span class="built_in">empty</span>()) &#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><br><span class="line">        <span class="type">int</span> n = prices.<span class="built_in">size</span>();</span><br><span class="line">        <span class="comment">// f[i][0]: 手上持有股票的最大收益</span></span><br><span class="line">        <span class="comment">// f[i][1]: 手上不持有股票，并且处于冷冻期中的累计最大收益</span></span><br><span class="line">        <span class="comment">// f[i][2]: 手上不持有股票，并且不在冷冻期中的累计最大收益</span></span><br><span class="line">        vector&lt;vector&lt;<span class="type">int</span>&gt;&gt; <span class="built_in">f</span>(n, <span class="built_in">vector</span>&lt;<span class="type">int</span>&gt;(<span class="number">3</span>));</span><br><span class="line">        f[<span class="number">0</span>][<span class="number">0</span>] = -prices[<span class="number">0</span>];</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span>; i &lt; n; ++i) &#123;</span><br><span class="line">            f[i][<span class="number">0</span>] = <span class="built_in">max</span>(f[i - <span class="number">1</span>][<span class="number">0</span>], f[i - <span class="number">1</span>][<span class="number">2</span>] - prices[i]);</span><br><span class="line">            f[i][<span class="number">1</span>] = f[i - <span class="number">1</span>][<span class="number">0</span>] + prices[i];</span><br><span class="line">            f[i][<span class="number">2</span>] = <span class="built_in">max</span>(f[i - <span class="number">1</span>][<span class="number">1</span>], f[i - <span class="number">1</span>][<span class="number">2</span>]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">max</span>(f[n - <span class="number">1</span>][<span class="number">1</span>], f[n - <span class="number">1</span>][<span class="number">2</span>]);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣187重复的DNA序列"><a href="#力扣187重复的DNA序列" class="headerlink" title="力扣187重复的DNA序列"></a>力扣187重复的DNA序列</h1><p>DNA序列 由一系列核苷酸组成，缩写为 ‘A’, ‘C’, ‘G’ 和 ‘T’.。</p><p>例如，”ACGAATTCCG” 是一个 DNA序列 。<br>在研究 DNA 时，识别 DNA 中的重复序列非常有用。</p><p>给定一个表示 DNA序列 的字符串 s ，返回所有在 DNA 分子中出现不止一次的 长度为 10 的序列(子字符串)。你可以按 任意顺序 返回答案。</p><p>示例 1：</p><p>输入：s &#x3D; “AAAAACCCCCAAAAACCCCCCAAAAAGGGTTT”<br>输出：<code>[&quot;AAAAACCCCC&quot;,&quot;CCCCCAAAAA&quot;]</code></p><p>示例 2：</p><p>输入：s &#x3D; “AAAAAAAAAAAAA”<br>输出：<code>[&quot;AAAAAAAAAA&quot;]</code></p><p>提示：</p><p>0 &lt;&#x3D; s.length &lt;&#x3D; 105<br>s[i]&#x3D;&#x3D;’A’、’C’、’G’ or ‘T’</p><h2 id="题目分析-5"><a href="#题目分析-5" class="headerlink" title="题目分析"></a>题目分析</h2><p>给你一串字符串，返回出现不止一次的长度为10的子串</p><h2 id="解题思路-5"><a href="#解题思路-5" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用滑动窗口和哈希表，每次移动一个长度截取长度为10的子串，再用哈希表判断子串中的各个字母是否与之前重复，只当次数等于2时输出子串，防止输出重复子串</p><h2 id="代码实现-5"><a href="#代码实现-5" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;string&gt; <span class="title">findRepeatedDnaSequences</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        vector&lt;string&gt; p,tmp;</span><br><span class="line">        <span class="type">int</span> n=s.<span class="built_in">length</span>();</span><br><span class="line">        unordered_map&lt;string,<span class="type">int</span>&gt;cnt;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> j=<span class="number">0</span>;j&lt;=n<span class="number">-10</span>;j++)&#123;</span><br><span class="line">            string sub=s.<span class="built_in">substr</span>(j,<span class="number">10</span>);</span><br><span class="line">            <span class="keyword">if</span>(++cnt[sub]==<span class="number">2</span>)&#123;</span><br><span class="line">                tmp.<span class="built_in">push_back</span>(sub);</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> tmp;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣2517礼盒最大甜蜜度"><a href="#力扣2517礼盒最大甜蜜度" class="headerlink" title="力扣2517礼盒最大甜蜜度"></a>力扣2517礼盒最大甜蜜度</h1><p>给你一个正整数数组 price ，其中 price[i] 表示第 i 类糖果的价格，另给你一个正整数 k 。</p><p>商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼盒中任意两种糖果 价格 绝对差的最小值。</p><p>返回礼盒的 最大 甜蜜度。</p><p>示例 1：</p><p>输入：price &#x3D; [13,5,1,8,21,2], k &#x3D; 3<br>输出：8<br>解释：选出价格分别为 [13,5,21] 的三类糖果。<br>礼盒的甜蜜度为 min(|13 - 5|, |13 - 21|, |5 - 21|) &#x3D; min(8, 8, 16) &#x3D; 8 。<br>可以证明能够取得的最大甜蜜度就是 8 。</p><p>示例 2：</p><p>输入：price &#x3D; [1,3,1], k &#x3D; 2<br>输出：2<br>解释：选出价格分别为 [1,3] 的两类糖果。<br>礼盒的甜蜜度为 min(|1 - 3|) &#x3D; min(2) &#x3D; 2 。<br>可以证明能够取得的最大甜蜜度就是 2 。</p><p>示例 3：</p><p>输入：price &#x3D; [7,7,7,7], k &#x3D; 2<br>输出：0<br>解释：从现有的糖果中任选两类糖果，甜蜜度都会是 0 。</p><p>提示：</p><p>2 &lt;&#x3D; k &lt;&#x3D; price.length &lt;&#x3D; 105<br>1 &lt;&#x3D; price[i] &lt;&#x3D; 109</p><h2 id="题目分析-6"><a href="#题目分析-6" class="headerlink" title="题目分析"></a>题目分析</h2><p>选出k种糖果，使得这k种里任意两种糖果价格绝对差的最小值最大</p><h2 id="解题思路-6"><a href="#解题思路-6" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用贪心和二分查找的思想<br>1，首先假设一个甜蜜度 mid，然后尝试在排好序的 price中找出 k 种糖果，并且任意两种相邻的价格差绝对值都大于 mid。如果可以找到这样的 k 种糖果，则说明可能存在更大的甜蜜度，返回true,修改左边界；如果找不到这样的 k 种糖果，则说明最大的甜蜜度只可能更小，返回false,修改右边界。<br>2.然后在假设一个甜蜜度 mid后，在排好序的 price中找 k 种糖果时，需要用到贪心的算法。即从小到大遍历 price 的元素，如果当前糖果的价格比上一个选中的糖果的价格的差大于 mid，则选中当前糖果，否则继续考察下一个糖果。</p><h2 id="代码实现-6"><a href="#代码实现-6" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">maximumTastiness</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; price, <span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=price.<span class="built_in">size</span>();</span><br><span class="line">        <span class="built_in">sort</span>(price.<span class="built_in">begin</span>(),price.<span class="built_in">end</span>());</span><br><span class="line">        <span class="type">int</span> left = <span class="number">0</span>, right = price[n - <span class="number">1</span>] - price[<span class="number">0</span>];</span><br><span class="line">        <span class="keyword">while</span> (left &lt; right) &#123;</span><br><span class="line">            <span class="type">int</span> mid = (left + right + <span class="number">1</span>) &gt;&gt; <span class="number">1</span>;</span><br><span class="line">            <span class="keyword">if</span> (<span class="built_in">check</span>(price, k, mid)) &#123;</span><br><span class="line">                left = mid;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                right = mid - <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> left;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">check</span><span class="params">(<span class="type">const</span> vector&lt;<span class="type">int</span>&gt; &amp;price, <span class="type">int</span> k, <span class="type">int</span> tastiness)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> prev = INT_MIN &gt;&gt; <span class="number">1</span>;</span><br><span class="line">        <span class="type">int</span> cnt = <span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> p : price) &#123;</span><br><span class="line">            <span class="keyword">if</span> (p - prev &gt;= tastiness) &#123;</span><br><span class="line">                cnt++;</span><br><span class="line">                prev = p;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> cnt &gt;= k;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;力扣125验证回文串&quot;&gt;&lt;a href=&quot;#力扣125验证回文串&quot; class=&quot;headerlink&quot; title=&quot;力扣125验证回文串&quot;&gt;&lt;/a&gt;力扣125验证回文串&lt;/h1&gt;&lt;p&gt;如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后，短语正着读</summary>
      
    
    
    
    <category term="算法" scheme="https://magic.thisis.host/categories/%E7%AE%97%E6%B3%95/"/>
    
    
    <category term="算法" scheme="https://magic.thisis.host/tags/%E7%AE%97%E6%B3%95/"/>
    
    <category term="数据结构" scheme="https://magic.thisis.host/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
  </entry>
  
  <entry>
    <title>移动应用开发实验室大一下考核题分析</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0423/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0423/</id>
    <published>2024-04-21T09:20:09.000Z</published>
    <updated>2024-04-22T05:44:36.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="力扣238除自身以外数组的乘积"><a href="#力扣238除自身以外数组的乘积" class="headerlink" title="力扣238除自身以外数组的乘积"></a>力扣238除自身以外数组的乘积</h1><p>给你一个整数数组 nums，返回 数组 answer ，其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。</p><p>题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内。</p><p>请 不要使用除法，且在 O(n) 时间复杂度内完成此题。</p><p>示例 1:</p><p>输入: nums &#x3D; <code>[1,2,3,4]</code><br>输出: <code>[24,12,8,6]</code></p><p>示例 2:</p><p>输入: nums &#x3D; <code>[-1,1,0,-3,3]</code><br>输出: <code>[0,0,9,0,0]</code></p><p>提示：</p><p>2 &lt;&#x3D; nums.length &lt;&#x3D; 105<br>-30 &lt;&#x3D; nums[i] &lt;&#x3D; 30<br>保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在  32 位 整数范围内</p><h2 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h2><p>输出一个数组，数组的第i位是除第i个数字的其他元素之积，不能使用除法</p><h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用前缀积和后缀积的思想，数组的每一位都等于它的前缀积×后缀积<br>注意：这里的前缀和后缀与正常不同，不能包含第i位</p><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">productExceptSelf</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        </span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">a</span><span class="params">(nums.size(),<span class="number">0</span>)</span>,<span class="title">b</span><span class="params">(nums.size(),<span class="number">0</span>)</span></span>;</span><br><span class="line">        <span class="function">vector&lt;<span class="type">int</span>&gt; <span class="title">ans</span><span class="params">(nums.size(),<span class="number">1</span>)</span></span>;</span><br><span class="line">        a[<span class="number">0</span>]=<span class="number">1</span>;</span><br><span class="line">        b[nums.<span class="built_in">size</span>()<span class="number">-1</span>]=<span class="number">1</span>;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">1</span>,j=nums.<span class="built_in">size</span>()<span class="number">-2</span>;j&gt;=<span class="number">0</span>;i++,j--)&#123;</span><br><span class="line">           a[i]=a[i<span class="number">-1</span>]*nums[i<span class="number">-1</span>];</span><br><span class="line">           b[j]=b[j<span class="number">+1</span>]*nums[j<span class="number">+1</span>];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;nums.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            ans[i]=a[i]*b[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣394字符串解码"><a href="#力扣394字符串解码" class="headerlink" title="力扣394字符串解码"></a>力扣394字符串解码</h1><p>给定一个经过编码的字符串，返回它解码后的字符串。</p><p>编码规则为: k[encoded_string]，表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。</p><p>你可以认为输入字符串总是有效的；输入字符串中没有额外的空格，且输入的方括号总是符合格式要求的。</p><p>此外，你可以认为原始数据不包含数字，所有的数字只表示重复的次数 k ，例如不会出现像 3a 或 2[4] 的输入。</p><p>示例 1：</p><p>输入：s &#x3D; “<code>3[a]2[bc]</code>“<br>输出：”aaabcbc”</p><p>示例 2：</p><p>输入：s &#x3D; “<code>3[a2[c]]</code>“<br>输出：”accaccacc”</p><p>示例 3：</p><p>输入：s &#x3D; “<code>2[abc]3[cd]ef</code>“<br>输出：”abcabccdcdcdef”</p><p>示例 4：</p><p>输入：s &#x3D; “<code>abc3[cd]xyz</code>“<br>输出：”abccdcdcdxyz”</p><p>提示：</p><p>1 &lt;&#x3D; s.length &lt;&#x3D; 30<br>s 由小写英文字母、数字和方括号 ‘[]’ 组成<br>s 保证是一个 有效 的输入。<br>s 中所有整数的取值范围为 [1, 300] </p><h2 id="题目分析-1"><a href="#题目分析-1" class="headerlink" title="题目分析"></a>题目分析</h2><p>有关括号的匹配的字符串问题</p><h2 id="解题思路-1"><a href="#解题思路-1" class="headerlink" title="解题思路"></a>解题思路</h2><p>当我们遇到括号的匹配时，首先想到的就是用栈来解决<br>设置两个栈nums,strs,分别来存放字符串中的数字与字符串，定义一个字符串res用于输出1.遇到数字用num记录，遇到字符串用res记录<br>2.遇到左括号时，把数字和字符串分别压入栈，再重置num为0，res为空<br>3.遇到右括号时，开始解码，取num的栈顶作为字符串重复的次数，重复将res加入栈内后，若栈顶还是字母，就会直接加到res之后，因为它们是同一级的运算，若是左括号，res会被压入str，作为上一层的运算</p><h2 id="代码实现-1"><a href="#代码实现-1" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">string <span class="title">decodeString</span><span class="params">(string s)</span> </span>&#123;</span><br><span class="line">        string res = <span class="string">&quot;&quot;</span>;</span><br><span class="line">        stack &lt;<span class="type">int</span>&gt; nums;</span><br><span class="line">        stack &lt;string&gt; strs;</span><br><span class="line">        <span class="type">int</span> num = <span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> len = s.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span>; i &lt; len; ++ i)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(s[i] &gt;= <span class="string">&#x27;0&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;9&#x27;</span>)</span><br><span class="line">            &#123;</span><br><span class="line">                num = num * <span class="number">10</span> + s[i] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>((s[i] &gt;= <span class="string">&#x27;a&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;z&#x27;</span>) ||(s[i] &gt;= <span class="string">&#x27;A&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;Z&#x27;</span>))</span><br><span class="line">            &#123;</span><br><span class="line">                res = res + s[i];</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="keyword">if</span>(s[i] == <span class="string">&#x27;[&#x27;</span>) <span class="comment">//将‘[’前的数字压入nums栈内， 字母字符串压入strs栈内</span></span><br><span class="line">            &#123;</span><br><span class="line">                nums.<span class="built_in">push</span>(num);</span><br><span class="line">                num = <span class="number">0</span>;</span><br><span class="line">                strs.<span class="built_in">push</span>(res); </span><br><span class="line">                res = <span class="string">&quot;&quot;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">else</span> <span class="comment">//遇到‘]’时，操作与之相配的‘[’之间的字符，使用分配律</span></span><br><span class="line">            &#123;</span><br><span class="line">                <span class="type">int</span> times = nums.<span class="built_in">top</span>();</span><br><span class="line">                nums.<span class="built_in">pop</span>();</span><br><span class="line">                <span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span>; j &lt; times; ++ j)</span><br><span class="line">                    strs.<span class="built_in">top</span>() += res;</span><br><span class="line">                res = strs.<span class="built_in">top</span>(); <span class="comment">//之后若还是字母，就会直接加到res之后，因为它们是同一级的运算</span></span><br><span class="line">                                  <span class="comment">//若是左括号，res会被压入strs栈，作为上一层的运算</span></span><br><span class="line">                strs.<span class="built_in">pop</span>();</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><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣23合并k个升序链表"><a href="#力扣23合并k个升序链表" class="headerlink" title="力扣23合并k个升序链表"></a>力扣23合并k个升序链表</h1><p>给你一个链表数组，每个链表都已经按升序排列。</p><p>请你将所有链表合并到一个升序链表中，返回合并后的链表。</p><p>示例 1：</p><p>输入：lists &#x3D; <code>[[1,4,5],[1,3,4],[2,6]]</code><br>输出：<code>[1,1,2,3,4,4,5,6]</code><br>解释：链表数组如下：<br>[<br>  1-&gt;4-&gt;5,<br>  1-&gt;3-&gt;4,<br>  2-&gt;6<br>]<br>将它们合并到一个有序链表中得到。<br>1-&gt;1-&gt;2-&gt;3-&gt;4-&gt;4-&gt;5-&gt;6</p><p>示例 2：</p><p>输入：lists &#x3D; <code>[]</code><br>输出：<code>[]</code><br>示例 3：</p><p>输入：lists &#x3D; <code>[[]]</code><br>输出：<code>[]</code></p><h2 id="题目分析-2"><a href="#题目分析-2" class="headerlink" title="题目分析"></a>题目分析</h2><p>与合并2个有序链表类似</p><h2 id="解题思路-2"><a href="#解题思路-2" class="headerlink" title="解题思路"></a>解题思路</h2><p>先合并前两个链表，再不断将新链表与下一个链表合并</p><h2 id="代码实现-2"><a href="#代码实现-2" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">mergeTwoLists</span><span class="params">(ListNode *a, ListNode *b)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span> ((!a) || (!b)) <span class="keyword">return</span> a ? a : b;</span><br><span class="line">        ListNode head, *tail = &amp;head, *aPtr = a, *bPtr = b;</span><br><span class="line">        <span class="keyword">while</span> (aPtr &amp;&amp; bPtr) &#123;</span><br><span class="line">            <span class="keyword">if</span> (aPtr-&gt;val &lt; bPtr-&gt;val) &#123;</span><br><span class="line">                tail-&gt;next = aPtr; aPtr = aPtr-&gt;next;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                tail-&gt;next = bPtr; bPtr = bPtr-&gt;next;</span><br><span class="line">            &#125;</span><br><span class="line">            tail = tail-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        tail-&gt;next = (aPtr ? aPtr : bPtr);</span><br><span class="line">        <span class="keyword">return</span> head.next;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">ListNode* <span class="title">mergeKLists</span><span class="params">(vector&lt;ListNode*&gt;&amp; lists)</span> </span>&#123;</span><br><span class="line">        ListNode *ans = <span class="literal">nullptr</span>;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">0</span>; i &lt; lists.<span class="built_in">size</span>(); ++i) &#123;</span><br><span class="line">            ans = <span class="built_in">mergeTwoLists</span>(ans, lists[i]);</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣232用栈实现队列"><a href="#力扣232用栈实现队列" class="headerlink" title="力扣232用栈实现队列"></a>力扣232用栈实现队列</h1><p>请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作（push、pop、peek、empty）：</p><p>实现 MyQueue 类：</p><p>void push(int x) 将元素 x 推到队列的末尾<br>int pop() 从队列的开头移除并返回元素<br>int peek() 返回队列开头的元素<br>boolean empty() 如果队列为空，返回 true ；否则，返回 false<br>说明：</p><p>你 只能 使用标准的栈操作 —— 也就是只有 push to top, peek&#x2F;pop from top, size, 和 is empty 操作是合法的。<br>你所使用的语言也许不支持栈。你可以使用 list 或者 deque（双端队列）来模拟一个栈，只要是标准的栈操作即可。</p><p>示例 1：</p><p>输入：<br><code>[&quot;MyQueue&quot;, &quot;push&quot;, &quot;push&quot;, &quot;peek&quot;, &quot;pop&quot;, &quot;empty&quot;]</code><br><code>[[], [1], [2], [], [], []]</code></p><p>输出：<br><code>[null, null, null, 1, 1, false]</code></p><p>解释：<br>MyQueue myQueue &#x3D; new MyQueue();<br>myQueue.push(1); &#x2F;&#x2F; queue is: [1]<br>myQueue.push(2); &#x2F;&#x2F; queue is: [1, 2] (leftmost is front of the queue)<br>myQueue.peek(); &#x2F;&#x2F; return 1<br>myQueue.pop(); &#x2F;&#x2F; return 1, queue is [2]<br>myQueue.empty(); &#x2F;&#x2F; return false</p><p>提示：</p><p>1 &lt;&#x3D; x &lt;&#x3D; 9<br>最多调用 100 次 push、pop、peek 和 empty<br>假设所有操作都是有效的 （例如，一个空的队列不会调用 pop 或者 peek 操作）</p><h2 id="题目分析-3"><a href="#题目分析-3" class="headerlink" title="题目分析"></a>题目分析</h2><p>用栈实现队列</p><h2 id="解题思路-3"><a href="#解题思路-3" class="headerlink" title="解题思路"></a>解题思路</h2><p>C语言<br>myQueueCreate<br>功能：创建一个新的队列，并初始化栈顶指针。<br>myQueuePush<br>功能：将一个元素推入队列。<br>myQueuePop<br>功能：从队列中弹出一个元素。<br>如果 stkOut 是空的，它会从 stkIn 中取出所有元素并放入 stkOut 中，然后弹出 stkOut 的顶部元素。这是为了确保弹出的元素是队列中最先进入的元素。<br>myQueuePeek<br>功能：查看队列的顶部元素但不弹出。<br>myQueueEmpty<br>功能：检查队列是否为空。<br>myQueueFree<br>功能：释放队列。</p><h2 id="代码分析"><a href="#代码分析" class="headerlink" title="代码分析"></a>代码分析</h2><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">typedef</span> <span class="class"><span class="keyword">struct</span> &#123;</span></span><br><span class="line">    <span class="type">int</span> stkInTop,stkOutTop;</span><br><span class="line">    <span class="type">int</span> stkIn[<span class="number">100</span>],stkOut[<span class="number">100</span>];</span><br><span class="line">&#125; MyQueue;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line">MyQueue* <span class="title function_">myQueueCreate</span><span class="params">()</span> &#123;</span><br><span class="line">    MyQueue* <span class="built_in">queue</span> = (MyQueue*)<span class="built_in">malloc</span>(<span class="keyword">sizeof</span>(MyQueue));</span><br><span class="line">    <span class="built_in">queue</span>-&gt;stkInTop = <span class="number">0</span>;</span><br><span class="line">    <span class="built_in">queue</span>-&gt;stkOutTop = <span class="number">0</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="built_in">queue</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">myQueuePush</span><span class="params">(MyQueue* obj, <span class="type">int</span> x)</span> &#123;</span><br><span class="line">    obj-&gt;stkIn[(obj-&gt;stkInTop)++] = x;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">myQueuePop</span><span class="params">(MyQueue* obj)</span> &#123;</span><br><span class="line">    <span class="type">int</span> inTop = obj-&gt;stkInTop;</span><br><span class="line">    <span class="type">int</span> outTop = obj-&gt;stkOutTop;</span><br><span class="line">    <span class="keyword">if</span>(outTop == <span class="number">0</span>)&#123;</span><br><span class="line">        <span class="keyword">while</span>(inTop)&#123;</span><br><span class="line">            obj-&gt;stkOut[outTop++] = obj-&gt;stkIn[--inTop];</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="type">int</span> res = obj-&gt;stkOut[--outTop];</span><br><span class="line">    <span class="keyword">while</span>(outTop)&#123;</span><br><span class="line">        obj-&gt;stkIn[inTop++] = obj-&gt;stkOut[--outTop];</span><br><span class="line">    &#125;</span><br><span class="line">    obj-&gt;stkInTop = inTop;</span><br><span class="line">    obj-&gt;stkOutTop = outTop;</span><br><span class="line">    <span class="keyword">return</span> res;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">myQueuePeek</span><span class="params">(MyQueue* obj)</span> &#123;</span><br><span class="line">    <span class="keyword">return</span> obj-&gt;stkIn[<span class="number">0</span>];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">bool</span> <span class="title function_">myQueueEmpty</span><span class="params">(MyQueue* obj)</span> &#123;</span><br><span class="line">    <span class="keyword">return</span> obj-&gt;stkInTop == <span class="number">0</span> &amp;&amp; obj-&gt;stkOutTop == <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">myQueueFree</span><span class="params">(MyQueue* obj)</span> &#123;</span><br><span class="line">    obj-&gt;stkInTop = <span class="number">0</span>;</span><br><span class="line">    obj-&gt;stkOutTop = <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣61旋转链表"><a href="#力扣61旋转链表" class="headerlink" title="力扣61旋转链表"></a>力扣61旋转链表</h1><p>给你一个链表的头节点 head ，旋转链表，将链表每个节点向右移动 k 个位置。</p><p>示例 1：</p><p>输入：head &#x3D; <code>[1,2,3,4,5]</code>, k &#x3D; 2<br>输出：<code>[4,5,1,2,3]</code></p><p>示例 2：</p><p>输入：head &#x3D; <code>[0,1,2]</code>, k &#x3D; 4<br>输出：<code>[2,0,1]</code></p><p>提示：</p><p>链表中节点的数目在范围 [0, 500] 内<br>-100 &lt;&#x3D; Node.val &lt;&#x3D; 100<br>0 &lt;&#x3D; k &lt;&#x3D; 2 * 109</p><h2 id="题目分析-4"><a href="#题目分析-4" class="headerlink" title="题目分析"></a>题目分析</h2><p>将旋转后的链表重新排序</p><h2 id="解题思路-4"><a href="#解题思路-4" class="headerlink" title="解题思路"></a>解题思路</h2><p>将链表存到数组中，再用三个reverse反转数组，再存入数组中<br>三个反转：先全部反转，再反转前k个，最后反转后k个</p><h2 id="代码实现-3"><a href="#代码实现-3" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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"> * Definition for singly-linked list.</span></span><br><span class="line"><span class="comment"> * struct ListNode &#123;</span></span><br><span class="line"><span class="comment"> *     int val;</span></span><br><span class="line"><span class="comment"> *     ListNode *next;</span></span><br><span class="line"><span class="comment"> *     ListNode() : val(0), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x) : val(x), next(nullptr) &#123;&#125;</span></span><br><span class="line"><span class="comment"> *     ListNode(int x, ListNode *next) : val(x), next(next) &#123;&#125;</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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function">ListNode* <span class="title">rotateRight</span><span class="params">(ListNode* head, <span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">if</span>(!head)&#123;</span><br><span class="line">            <span class="keyword">return</span> head;</span><br><span class="line">        &#125;</span><br><span class="line">        ListNode*p=head;</span><br><span class="line">        vector&lt;<span class="type">int</span>&gt;arr;</span><br><span class="line">        <span class="type">int</span> n = <span class="number">1</span>;</span><br><span class="line">        ListNode* iter = head;</span><br><span class="line">        <span class="keyword">while</span> (iter-&gt;next != <span class="literal">nullptr</span>) &#123;</span><br><span class="line">            iter = iter-&gt;next;</span><br><span class="line">            n++;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="type">int</span> add = k % n;</span><br><span class="line">        <span class="keyword">if</span> (add == n) &#123;</span><br><span class="line">            <span class="keyword">return</span> head;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">while</span>(p-&gt;next!=<span class="literal">nullptr</span>)&#123;</span><br><span class="line">            arr.<span class="built_in">push_back</span>(p-&gt;val);</span><br><span class="line">             p=p-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        arr.<span class="built_in">push_back</span>(p-&gt;val);</span><br><span class="line">        p=head;</span><br><span class="line">        <span class="built_in">reverse</span>(arr.<span class="built_in">begin</span>(),arr.<span class="built_in">end</span>());</span><br><span class="line">        <span class="built_in">reverse</span>(arr.<span class="built_in">begin</span>(),arr.<span class="built_in">begin</span>()+add);</span><br><span class="line">        <span class="built_in">reverse</span>(arr.<span class="built_in">begin</span>()+add,arr.<span class="built_in">end</span>());</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;arr.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            p-&gt;val=arr[i];</span><br><span class="line">            p=p-&gt;next;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> head;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣392判断子序列"><a href="#力扣392判断子序列" class="headerlink" title="力扣392判断子序列"></a>力扣392判断子序列</h1><p>给定字符串 s 和 t ，判断 s 是否为 t 的子序列。</p><p>字符串的一个子序列是原始字符串删除一些（也可以不删除）字符而不改变剩余字符相对位置形成的新字符串。（例如，”ace”是”abcde”的一个子序列，而”aec”不是）。</p><p>进阶：</p><p>如果有大量输入的 S，称作 S1, S2, … , Sk 其中 k &gt;&#x3D; 10亿，你需要依次检查它们是否为 T 的子序列。在这种情况下，你会怎样改变代码？</p><p>致谢：</p><p>特别感谢 @pbrother 添加此问题并且创建所有测试用例。</p><p>示例 1：</p><p>输入：s &#x3D; “abc”, t &#x3D; “ahbgdc”<br>输出：true</p><p>示例 2：</p><p>输入：s &#x3D; “axc”, t &#x3D; “ahbgdc”<br>输出：false</p><p>提示：</p><p>0 &lt;&#x3D; s.length &lt;&#x3D; 100<br>0 &lt;&#x3D; t.length &lt;&#x3D; 10^4<br>两个字符串都只由小写字符组成<br>。</p><h2 id="题目分析-5"><a href="#题目分析-5" class="headerlink" title="题目分析"></a>题目分析</h2><p>判断s是否是t的子序列，其中可以有别的字符，但不能改变相对位置</p><h2 id="解题思路-5"><a href="#解题思路-5" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用快慢指针，慢指针位于s，快指针位于t，只有快慢指针指向的字符相等时慢指针移动，快指针持续移动，当慢指针遍历完时（也就是快指针已经将慢指针指向的字符都匹配上）返回true</p><h2 id="代码实现-4"><a href="#代码实现-4" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">bool</span> <span class="title">isSubsequence</span><span class="params">(string s, string t)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> slowindex,fastindex;</span><br><span class="line">        <span class="keyword">if</span>(s.<span class="built_in">size</span>()==<span class="number">0</span>)<span class="keyword">return</span> <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">for</span>(fastindex=<span class="number">0</span>,slowindex=<span class="number">0</span>;fastindex&lt;t.<span class="built_in">size</span>();fastindex++)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="keyword">if</span>(s[slowindex]==t[fastindex])</span><br><span class="line">            &#123;</span><br><span class="line">                <span class="keyword">if</span>(++slowindex==s.<span class="built_in">size</span>())</span><br><span class="line">                <span class="keyword">return</span> <span class="literal">true</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">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;h1 id=&quot;力扣238除自身以外数组的乘积&quot;&gt;&lt;a href=&quot;#力扣238除自身以外数组的乘积&quot; class=&quot;headerlink&quot; title=&quot;力扣238除自身以外数组的乘积&quot;&gt;&lt;/a&gt;力扣238除自身以外数组的乘积&lt;/h1&gt;&lt;p&gt;给你一个整数数组 nums，返回 数</summary>
      
    
    
    
    <category term="算法" scheme="https://magic.thisis.host/categories/%E7%AE%97%E6%B3%95/"/>
    
    
    <category term="算法" scheme="https://magic.thisis.host/tags/%E7%AE%97%E6%B3%95/"/>
    
    <category term="数据结构" scheme="https://magic.thisis.host/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
  </entry>
  
  <entry>
    <title>每日一题-力扣287寻找重复数、力扣155最小栈</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0417/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0417/</id>
    <published>2024-04-17T14:53:09.000Z</published>
    <updated>2024-07-23T09:36:37.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="力扣287寻找重复数"><a href="#力扣287寻找重复数" class="headerlink" title="力扣287寻找重复数"></a>力扣287寻找重复数</h1><p>给定一个包含 n + 1 个整数的数组 nums ，其数字都在 [1, n] 范围内（包括 1 和 n），可知至少存在一个重复的整数。</p><p>假设 nums 只有 一个重复的整数 ，返回 这个重复的数 。</p><p>你设计的解决方案必须 不修改 数组 nums 且只用常量级 O(1) 的额外空间。</p><p>示例 1：</p><p>输入：<code>nums = [1,3,4,2,2]</code><br>输出：<code>2</code></p><p>示例 2：</p><p>输入：<code>nums = [3,1,3,4,2]</code><br>输出：<code>3</code></p><p>示例 3 :</p><p>输入：<code>nums = [3,3,3,3,3]</code><br>输出：<code>3</code></p><h2 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h2><p>一共有n+1个整数，但只有n个数字，相当于10个苹果放进9个抽屉里，一定有一个抽屉重复有两个苹果，找出那个重复的数字</p><h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用二分的思想，并将时间转为空间，取数组的中间值，正常来说数组中小于中间值的个数应该等于n&#x2F;2，如果数组中小于中间值的个数大于一半，那么重复的数字一定小于中间值，改变右边界<br>注意：本题中改变的右边界不是无序数组中的边界，而是改变n个数的有序数组中的边界值</p><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">findDuplicate</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> ans=<span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>,j=nums.<span class="built_in">size</span>()<span class="number">-1</span>;i&lt;=j;)&#123;</span><br><span class="line">            <span class="type">int</span> mid=(i+j)/<span class="number">2</span>;</span><br><span class="line">            <span class="type">int</span> cnt=<span class="number">0</span>;</span><br><span class="line">            <span class="keyword">for</span>(<span class="type">int</span> k=<span class="number">0</span>;k&lt;nums.<span class="built_in">size</span>();k++)&#123;</span><br><span class="line">                cnt+=nums[k]&lt;=mid;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span>(cnt&lt;=mid)&#123;</span><br><span class="line">                i=mid<span class="number">+1</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                j=mid<span class="number">-1</span>;</span><br><span class="line">                ans=mid;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br></pre></td></tr></table></figure><h1 id="力扣155最小栈"><a href="#力扣155最小栈" class="headerlink" title="力扣155最小栈"></a>力扣155最小栈</h1><p>设计一个支持 push ，pop ，top 操作，并能在常数时间内检索到最小元素的栈。</p><p>实现 MinStack 类:</p><p>MinStack() 初始化堆栈对象。<br>void push(int val) 将元素val推入堆栈。<br>void pop() 删除堆栈顶部的元素。<br>int top() 获取堆栈顶部的元素。<br>int getMin() 获取堆栈中的最小元素。</p><p>示例 1:</p><p>输入：<br><code>[&quot;MinStack&quot;,&quot;push&quot;,&quot;push&quot;,&quot;push&quot;,&quot;getMin&quot;,&quot;pop&quot;,&quot;top&quot;,&quot;getMin&quot;]</code><br><code>[[],[-2],[0],[-3],[],[],[],[]]</code></p><p>输出：<br><code>[null,null,null,null,-3,null,0,-2]</code></p><p>解释：<br>MinStack minStack &#x3D; new MinStack();<br>minStack.push(-2);<br>minStack.push(0);<br>minStack.push(-3);<br>minStack.getMin();   –&gt; 返回 -3.<br>minStack.pop();<br>minStack.top();      –&gt; 返回 0.<br>minStack.getMin();   –&gt; 返回 -2.</p><p>提示：</p><p>-231 &lt;&#x3D; val &lt;&#x3D; 231 - 1<br>pop、top 和 getMin 操作总是在 非空栈 上调用<br>push, pop, top, and getMin最多被调用 3 * 104 次</p><h2 id="题目分析-1"><a href="#题目分析-1" class="headerlink" title="题目分析"></a>题目分析</h2><p>利用栈实现 MinStack 类:</p><p>MinStack() 初始化堆栈对象。<br>void push(int val) 将元素val推入堆栈。<br>void pop() 删除堆栈顶部的元素。<br>int top() 获取堆栈顶部的元素。<br>int getMin() 获取堆栈中的最小元素。</p><h2 id="解题思路-1"><a href="#解题思路-1" class="headerlink" title="解题思路"></a>解题思路</h2><p>我们可以设计一个辅助栈，在每一个新的元素进入栈时记录当前栈内最小的元素将其位于栈顶，每次入栈时将其与辅助栈栈顶比较，并将最小值入栈，就可以不断记录堆栈的最小值</p><h2 id="代码实现-1"><a href="#代码实现-1" class="headerlink" title="代码实现"></a>代码实现</h2><pre><code class="cpp">class MinStack &#123;    stack&lt;int&gt;x_stack;    stack&lt;int&gt;min_stack;//辅助栈 用于存储任意时刻栈内元素的最小值 位于栈顶public:    MinStack() &#123;        min_stack.push(INT_MAX);    &#125;        void push(int val) &#123;        x_stack.push(val);        min_stack.push(min(min_stack.top(),val));    &#125;        void pop() &#123;        x_stack.pop();        min_stack.pop();    &#125;        int top() &#123;        return x_stack.top();    &#125;        int getMin() &#123;        return min_stack.top();    &#125;&#125;;</code></pre>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;力扣287寻找重复数&quot;&gt;&lt;a href=&quot;#力扣287寻找重复数&quot; class=&quot;headerlink&quot; title=&quot;力扣287寻找重复数&quot;&gt;&lt;/a&gt;力扣287寻找重复数&lt;/h1&gt;&lt;p&gt;给定一个包含 n + 1 个整数的数组 nums ，其数字都在 [1, n]</summary>
      
    
    
    
    <category term="算法" scheme="https://magic.thisis.host/categories/%E7%AE%97%E6%B3%95/"/>
    
    
    <category term="算法" scheme="https://magic.thisis.host/tags/%E7%AE%97%E6%B3%95/"/>
    
    <category term="数据结构" scheme="https://magic.thisis.host/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
  </entry>
  
  <entry>
    <title>每日一题-滑动窗口与二分练习</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0414/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0414/</id>
    <published>2024-04-14T15:44:09.000Z</published>
    <updated>2024-07-22T08:27:42.000Z</updated>
    
    <content type="html"><![CDATA[<h1 id="力扣LCR008长度最小的子数组"><a href="#力扣LCR008长度最小的子数组" class="headerlink" title="力扣LCR008长度最小的子数组"></a>力扣LCR008长度最小的子数组</h1><p>给定一个含有 n 个正整数的数组和一个正整数 target 。</p><p>找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, …, numsr-1, numsr] ，并返回其长度。如果不存在符合条件的子数组，返回 0 。</p><p>示例 1：</p><p>输入：<code>target = 7, nums = [2,3,1,2,4,3]</code><br>输出：<code>2</code><br>解释：子数组 <code>[4,3]</code> 是该条件下的长度最小的子数组。</p><p>示例 2：</p><p>输入：<code>target = 4, nums = [1,4,4]</code><br>输出：<code>1</code></p><p>示例 3：</p><p>输入：<code>target = 11, nums = [1,1,1,1,1,1,1,1]</code><br>输出：<code>0</code></p><h2 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h2><p>找出大于等于目标值的长度最小的连续的子数组</p><h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用滑动窗口的思想，先找到第一个大于等于目标值的子数组，再使窗口向右移动，当和再次大于目标值时，移动窗口并更新最小长度</p><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">minSubArrayLen</span><span class="params">(<span class="type">int</span> target, vector&lt;<span class="type">int</span>&gt;&amp; nums)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span>(n==<span class="number">0</span>)<span class="keyword">return</span> &#123;&#125;;</span><br><span class="line">        <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> start=<span class="number">0</span>,end=<span class="number">0</span>,ans=INT_MAX;</span><br><span class="line">        <span class="keyword">while</span>(end&lt;n)&#123;</span><br><span class="line">            sum+=nums[end++];</span><br><span class="line">            <span class="keyword">while</span>(sum&gt;=target)&#123;</span><br><span class="line">                ans=<span class="built_in">min</span>(ans,end-start);</span><br><span class="line">                sum-=nums[start];</span><br><span class="line">                start++;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans==INT_MAX?<span class="number">0</span>:ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣LCR009乘积小于k的子数组"><a href="#力扣LCR009乘积小于k的子数组" class="headerlink" title="力扣LCR009乘积小于k的子数组"></a>力扣LCR009乘积小于k的子数组</h1><p>给定一个正整数数组 nums和整数 k ，请找出该数组内乘积小于 k 的连续的子数组的个数。</p><p>示例 1:</p><p>输入: <code>nums = [10,5,2,6], k = 100</code><br>输出: <code>8</code><br>解释: 8 个乘积小于 100 的子数组分别为: <code>[10], [5], [2], [6], [10,5], [5,2], [2,6], [5,2,6]</code>。<br>需要注意的是 <code>[10,5,2]</code> 并不是乘积小于100的子数组。</p><p>示例 2:</p><p>输入: <code>nums = [1,2,3], k = 0</code><br>输出: <code>0</code></p><h2 id="题目分析-1"><a href="#题目分析-1" class="headerlink" title="题目分析"></a>题目分析</h2><p>找出数组内乘积小于 k 的连续的子数组的个数</p><h2 id="解题思路-1"><a href="#解题思路-1" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用滑动窗口的思想，先找到第一个长度最长的乘积小于k的数组，这样该数组里各个连续的数组都成立，然后移动窗口，继续寻找</p><h2 id="代码实现-1"><a href="#代码实现-1" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">numSubarrayProductLessThanK</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> k)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> sum=<span class="number">1</span>,cnt=<span class="number">0</span>,j=<span class="number">0</span>;</span><br><span class="line">        <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;nums.<span class="built_in">size</span>();i++)&#123;</span><br><span class="line">            sum*=nums[i];</span><br><span class="line">                <span class="keyword">while</span>(sum&gt;=k&amp;&amp;j&lt;=i)&#123;</span><br><span class="line">                    sum/=nums[j++];</span><br><span class="line">                &#125;</span><br><span class="line">                cnt+=i-j<span class="number">+1</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> cnt;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣35搜索插入位置"><a href="#力扣35搜索插入位置" class="headerlink" title="力扣35搜索插入位置"></a>力扣35搜索插入位置</h1><p>给定一个排序数组和一个目标值，在数组中找到目标值，并返回其索引。如果目标值不存在于数组中，返回它将会被按顺序插入的位置。</p><p>请必须使用时间复杂度为 O(log n) 的算法。</p><p>示例 1:</p><p>输入:<code> nums = [1,3,5,6], target = 5</code><br>输出: <code>2</code></p><p>示例 2:</p><p>输入: <code>nums = [1,3,5,6], target = 2</code><br>输出: <code>1</code></p><p>示例 3:</p><p>输入: <code>nums = [1,3,5,6], target = 7</code><br>输出: <code>4</code></p><h2 id="题目分析-2"><a href="#题目分析-2" class="headerlink" title="题目分析"></a>题目分析</h2><p>题目很好理解，在数组中寻找一个数，如果没有则返回插入位置</p><h2 id="解题思路-2"><a href="#解题思路-2" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用二分的思想快速找到位置，因为数组严格递增，如果数组中间值大于目标值，那么右半边数组的所有数都大于目标值，可直接缩小搜索范围，同理左边，便能很快定位</p><h2 id="代码实现-2"><a href="#代码实现-2" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">searchInsert</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> target)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> left=<span class="number">0</span>;</span><br><span class="line">        <span class="type">int</span> right=nums.<span class="built_in">size</span>()<span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">while</span>(left&lt;=right)</span><br><span class="line">        &#123;</span><br><span class="line">            <span class="type">int</span> middle=left+(right-left)/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span>(nums[middle]&gt;target)</span><br><span class="line">            &#123;</span><br><span class="line">                right=middle<span class="number">-1</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span> <span class="keyword">if</span>(nums[middle]&lt;target)</span><br><span class="line">            &#123;</span><br><span class="line">                left=middle<span class="number">+1</span>;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">return</span> middle;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line"><span class="keyword">return</span> right<span class="number">+1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure><h1 id="力扣33搜索旋转排序数组"><a href="#力扣33搜索旋转排序数组" class="headerlink" title="力扣33搜索旋转排序数组"></a>力扣33搜索旋转排序数组</h1><p>整数数组 nums 按升序排列，数组中的值 互不相同 。</p><p>在传递给函数之前，nums 在预先未知的某个下标 k（0 &lt;&#x3D; k &lt; nums.length）上进行了 旋转，使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]]（下标 从 0 开始 计数）。例如， [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。</p><p>给你 旋转后 的数组 nums 和一个整数 target ，如果 nums 中存在这个目标值 target ，则返回它的下标，否则返回 -1 。</p><p>你必须设计一个时间复杂度为 O(log n) 的算法解决此问题。</p><p>示例 1：</p><p>输入：<code>nums = [4,5,6,7,0,1,2], target = 0</code><br>输出：<code>4</code></p><p>示例 2：</p><p>输入：<code>nums = [4,5,6,7,0,1,2], target = 3</code><br>输出：<code>-1</code></p><p>示例 3：</p><p>输入：<code>nums = [1], target = 0</code><br>输出：<code>-1</code></p><p>提示：</p><p>1 &lt;&#x3D; nums.length &lt;&#x3D; 5000<br>-104 &lt;&#x3D; nums[i] &lt;&#x3D; 104<br>nums 中的每个值都 独一无二<br>题目数据保证 nums 在预先未知的某个下标上进行了旋转<br>-104 &lt;&#x3D; target &lt;&#x3D; 104</p><h2 id="题目分析-3"><a href="#题目分析-3" class="headerlink" title="题目分析"></a>题目分析</h2><p>给定一个升序的数组和目标值，在数组经过向右旋转多次后，搜索目标值</p><h2 id="解题思路-3"><a href="#解题思路-3" class="headerlink" title="解题思路"></a>解题思路</h2><p>利用二分法，因为原来的数组是升序的，即使经过旋转后，数组仍然呈现两部分的严格递增，且前一部分的初始值一定大于另一部分的末尾值，这时我们可以分为两种情况：<br>1.首先将旋转后的数组第一个值与中间值比较，如果中间值大，那么旋转后的分割点(也就是原数组的nums[0])在中间值以后，那么我们可以保证中间值前面都是严格递增<br>然后再利用二分，当目标值小于中间值时，改变右边界，注意：改变的同时一定要保证目标值也小于旋转后的nums[0]因为它有可能在后半部分<br>2.当中间值小于数组第一个值时，分割点在中间值前面，同理可以保证中间值后面都是严格递增的</p><h2 id="代码实现-3"><a href="#代码实现-3" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight cpp"><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></pre></td><td class="code"><pre><span class="line"><span class="keyword">class</span> <span class="title class_">Solution</span> &#123;</span><br><span class="line"><span class="keyword">public</span>:</span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">search</span><span class="params">(vector&lt;<span class="type">int</span>&gt;&amp; nums, <span class="type">int</span> target)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> n=nums.<span class="built_in">size</span>();</span><br><span class="line">        <span class="keyword">if</span>(!n)<span class="keyword">return</span> <span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">if</span>(n==<span class="number">1</span>)<span class="keyword">return</span> nums[<span class="number">0</span>]==target?<span class="number">0</span>:<span class="number">-1</span>;</span><br><span class="line">        <span class="type">int</span> l=<span class="number">0</span>,r=n<span class="number">-1</span>;</span><br><span class="line">        <span class="keyword">while</span>(l&lt;=r)&#123;</span><br><span class="line">            <span class="type">int</span> mid=(l+r)/<span class="number">2</span>;</span><br><span class="line">            <span class="keyword">if</span>(nums[mid]==target)<span class="keyword">return</span> mid;</span><br><span class="line">            <span class="keyword">if</span>(nums[<span class="number">0</span>]&lt;=nums[mid])&#123;</span><br><span class="line">                <span class="keyword">if</span>(target&lt;nums[mid]&amp;&amp;target&gt;=nums[<span class="number">0</span>])&#123;</span><br><span class="line">                    r=mid<span class="number">-1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    l=mid<span class="number">+1</span>;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                <span class="keyword">if</span>(target&gt;nums[mid]&amp;&amp;target&lt;=nums[n<span class="number">-1</span>])&#123;</span><br><span class="line">                    l=mid<span class="number">+1</span>;</span><br><span class="line">                &#125;<span class="keyword">else</span>&#123;</span><br><span class="line">                    r=mid<span class="number">-1</span>;</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> <span class="number">-1</span>;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;h1 id=&quot;力扣LCR008长度最小的子数组&quot;&gt;&lt;a href=&quot;#力扣LCR008长度最小的子数组&quot; class=&quot;headerlink&quot; title=&quot;力扣LCR008长度最小的子数组&quot;&gt;&lt;/a&gt;力扣LCR008长度最小的子数组&lt;/h1&gt;&lt;p&gt;给定一个含有 n 个正整数的</summary>
      
    
    
    
    <category term="算法" scheme="https://magic.thisis.host/categories/%E7%AE%97%E6%B3%95/"/>
    
    
    <category term="算法" scheme="https://magic.thisis.host/tags/%E7%AE%97%E6%B3%95/"/>
    
    <category term="数据结构" scheme="https://magic.thisis.host/tags/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/"/>
    
  </entry>
  
  <entry>
    <title>每日一题-力扣53最大连续子序列之和</title>
    <link href="https://magic.thisis.host/2024/daily-problem-0401/"/>
    <id>https://magic.thisis.host/2024/daily-problem-0401/</id>
    <published>2024-04-03T11:24:51.000Z</published>
    <updated>2024-04-07T07:40:24.000Z</updated>
    
    <content type="html"><![CDATA[<p>给你一个整数数组 <code>nums</code> ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。</p><p>子数组：是数组中的一个连续部分。</p><p>示例 1：<br>输入：<code>nums = [-2,1,-3,4,-1,2,1,-5,4]</code><br>输出：<code>6</code><br>解释：连续子数组 <code>[4,-1,2,1]</code> 的和最大，为 6 。</p><p>示例 2：<br>输入：<code>nums = [1]</code><br>输出：<code>1</code></p><p>示例 3：<br>输入：<code>nums = [5,4,-1,7,8]</code><br>输出：<code>23</code></p><p>提示：<br><code>1 &lt;= nums.length &lt;= 105</code><br><code>-104 &lt;= nums[i] &lt;= 104</code></p><p>进阶：如果你已经实现复杂度为 O(n) 的解法，尝试使用更为精妙的 <code>分治法</code> 求解。</p><h2 id="题目分析"><a href="#题目分析" class="headerlink" title="题目分析"></a>题目分析</h2><p>题目很容易理解，求出最大的连续的子序列和即可</p><h2 id="解题思路"><a href="#解题思路" class="headerlink" title="解题思路"></a>解题思路</h2><p>设置一个值等于最小值，当和大于最小值时，将和赋给这个值，目的是不断更改确定子序列和的终止位置</p><p>当前n个数和为负数时，对后面的子序列没用，舍去，重置sum&#x3D;0</p><h2 id="代码实现"><a href="#代码实现" class="headerlink" title="代码实现"></a>代码实现</h2><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> <span class="title function_">maxSubArray</span><span class="params">(<span class="type">int</span>* nums, <span class="type">int</span> numsSize)</span> &#123;</span><br><span class="line">    <span class="type">int</span> n=numsSize;</span><br><span class="line">    <span class="type">int</span> result=INT32_MIN;</span><br><span class="line">    <span class="type">int</span> sum=<span class="number">0</span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)&#123;</span><br><span class="line">       sum+=nums[i];</span><br><span class="line">        <span class="keyword">if</span>(sum&gt;result)</span><br><span class="line">        &#123;</span><br><span class="line">            result=sum;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">if</span>(sum&lt;=<span class="number">0</span>)</span><br><span class="line">        &#123;</span><br><span class="line">            sum=<span class="number">0</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> result;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;给你一个整数数组 &lt;code&gt;nums&lt;/code&gt; ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。&lt;/p&gt;
&lt;p&gt;子数组：是数组中的一个连续部分。&lt;/p&gt;
&lt;p&gt;示例 1：&lt;br&gt;输入：&lt;code&gt;nums = [-2,1,-3,4,-1,</summary>
      
    
    
    
    <category term="算法" scheme="https://magic.thisis.host/categories/%E7%AE%97%E6%B3%95/"/>
    
    
    <category term="算法" scheme="https://magic.thisis.host/tags/%E7%AE%97%E6%B3%95/"/>
    
  </entry>
  
</feed>
