<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>数组 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E6%95%B0%E7%BB%84/</link><description>Recent content in 数组 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 18 Mar 2025 10:40:03 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/%E6%95%B0%E7%BB%84/index.xml" rel="self" type="application/rss+xml"/><item><title>求数组中最大的两个值</title><link>https://fe-interview.pangcy.cn/docs/algorithm/algorithm-02/</link><pubDate>Tue, 18 Mar 2025 02:00:27 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/algorithm/algorithm-02/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>这道题主要考察以下几个方面：&lt;/p>
&lt;ol>
&lt;li>数组遍历和比较操作&lt;/li>
&lt;li>时间复杂度优化&lt;/li>
&lt;li>边界情况处理能力&lt;/li>
&lt;li>算法思维&lt;/li>
&lt;/ol>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>求数组中最大的两个值，有多种解决方案：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>排序法&lt;/strong>：将数组排序后取最后两个元素&lt;/li>
&lt;li>&lt;strong>两次遍历法&lt;/strong>：第一次找最大值，第二次找第二大值&lt;/li>
&lt;li>&lt;strong>单次遍历法&lt;/strong>：维护两个变量，分别记录最大值和第二大值&lt;/li>
&lt;/ol>
&lt;p>其中，单次遍历法的时间复杂度最优，为O(n)。&lt;/p>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>&lt;strong>忽略数组长度检查&lt;/strong>：当数组长度小于2时，无法返回两个最大值&lt;/li>
&lt;li>&lt;strong>重复计算最大值&lt;/strong>：在两次遍历法中，第二次遍历时没有排除第一次找到的最大值&lt;/li>
&lt;li>&lt;strong>未考虑相等元素&lt;/strong>：当有多个元素值相同且为最大值时的处理&lt;/li>
&lt;li>&lt;strong>未考虑负数情况&lt;/strong>：初始化第二大值为0可能导致负数数组出错&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="1-排序法">1. 排序法 &lt;a href="#1-%e6%8e%92%e5%ba%8f%e6%b3%95" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="c6f2636" class="language-javascript ">
 &lt;code>function findTwoLargest(arr) {
 if (!Array.isArray(arr) || arr.length &amp;lt; 2) {
 return &amp;#34;数组长度不足&amp;#34;;
 }

 // 对数组进行降序排序
 const sortedArr = [...arr].sort((a, b) =&amp;gt; b - a);

 // 返回最大的两个值
 return [sortedArr[0], sortedArr[1]];
}&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>&lt;strong>时间复杂度：O(n log n)，主要受排序算法影响&lt;/strong>&lt;/p>
&lt;h3 id="2-两次遍历法">2. 两次遍历法 &lt;a href="#2-%e4%b8%a4%e6%ac%a1%e9%81%8d%e5%8e%86%e6%b3%95" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>


 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="53e335a" class="language-javascript ">
 &lt;code> function findTwoLargest(arr) {
 if (!Array.isArray(arr) || arr.length &amp;lt; 2) {
 return &amp;#34;数组长度不足&amp;#34;;
 }

 // 第一次遍历找最大值
 let max = -Infinity;
 let maxIndex = -1;

 for (let i = 0; i &amp;lt; arr.length; i&amp;#43;&amp;#43;) {
 if (arr[i] &amp;gt; max) {
 max = arr[i];
 maxIndex = i;
 }
 }

 // 第二次遍历找第二大值
 let secondMax = -Infinity;

 for (let i = 0; i &amp;lt; arr.length; i&amp;#43;&amp;#43;) {
 if (i !== maxIndex &amp;amp;&amp;amp; arr[i] &amp;gt; secondMax) {
 secondMax = arr[i];
 }
 }

 return [max, secondMax];
 }&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;p>&lt;strong>时间复杂度：O(n)，只需要遍历数组两次&lt;/strong>&lt;/p></description></item></channel></rss>