<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 0128. 最長連續序列 ## 題目地址(128. 最長連續序列) <https://leetcode-cn.com/problems/longest-consecutive-sequence/> ## 題目描述 ``` <pre class="calibre18">``` 給定一個未排序的整數數組,找出最長連續序列的長度。 要求算法的時間復雜度為 O(n)。 示例: 輸入: [100, 4, 200, 1, 3, 2] 輸出: 4 解釋: 最長連續序列是 [1, 2, 3, 4]。它的長度為 4。 ``` ``` ## 前置知識 - hashmap ## 公司 - 阿里 - 騰訊 - 百度 - 字節 ## 思路 這是一道最最長連續數字序列長度的題目, 官網給出的難度是`hard`. 符合直覺的做法是先排序,然后用一個變量記錄最大值,遍歷去更新最大值即可, 代碼: ``` <pre class="calibre18">``` <span class="hljs-keyword">if</span> (nums.length === <span class="hljs-params">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-params">0</span>; <span class="hljs-keyword">let</span> count = <span class="hljs-params">1</span>; <span class="hljs-keyword">let</span> maxCount = <span class="hljs-params">1</span>; <span class="hljs-title">// 這里其實可以不需要排序,這么做只不過是為了方便理解</span> nums = [...new <span class="hljs-params">Set</span>(nums)].sort((a, b) => a - b); <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-params">0</span>; i < nums.length - <span class="hljs-params">1</span>; i++) { <span class="hljs-keyword">if</span> (nums[i + <span class="hljs-params">1</span>] - nums[i] === <span class="hljs-params">1</span>) { count++; } <span class="hljs-keyword">else</span> { <span class="hljs-keyword">if</span> (count > maxCount) { maxCount = count; } count = <span class="hljs-params">1</span>; } } <span class="hljs-keyword">return</span> <span class="hljs-params">Math</span>.max(count, maxCount); ``` ``` 但是需要排序時間復雜度會上升,題目要求時間復雜度為 O(n), 那么我們其實可以不用排序去解決的。 思路就是將之前”排序之后,通過比較前后元素是否相差 1 來判斷是否連續“的思路改為 不排序而是`直接遍歷,然后在內部循環里面查找是否存在當前值的鄰居元素`,但是馬上有一個 問題,內部我們`查找是否存在當前值的鄰居元素`的過程如果使用數組,時間復雜度是 O(n), 那么總體的復雜度就是 O(n^2),完全不可以接受。怎么辦呢? 我們換個思路,用空間來換時間。比如用類似于 hashmap 這樣的數據結構優化查詢部分,將時間復雜度降低到 O(1), 代碼見后面`代碼部分` ## 關鍵點解析 - 空間換時間 ## 代碼 ``` <pre class="calibre18">``` <span class="hljs-title">/** * @param {number[]} nums * @return {number} */</span> <span class="hljs-keyword">var</span> longestConsecutive = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">nums</span>) </span>{ set = <span class="hljs-keyword">new</span> <span class="hljs-params">Set</span>(nums); <span class="hljs-keyword">let</span> max = <span class="hljs-params">0</span>; <span class="hljs-keyword">let</span> temp = <span class="hljs-params">0</span>; set.forEach(x => { <span class="hljs-title">// 說明x是連續序列的開頭元素</span> <span class="hljs-keyword">if</span> (!set.has(x - <span class="hljs-params">1</span>)) { temp = x + <span class="hljs-params">1</span>; <span class="hljs-keyword">while</span> (set.has(y)) { temp = temp + <span class="hljs-params">1</span>; } max = <span class="hljs-params">Math</span>.max(max, y - x); <span class="hljs-title">// y - x 就是從x開始到最后有多少連續的數字</span> } }); <span class="hljs-keyword">return</span> max; }; ``` ``` **復雜度分析** - 時間復雜度:O(N)O(N)O(N) - 空間復雜度:O(N)O(N)O(N) 大家對此有何看法,歡迎給我留言,我有時間都會一一查看回答。更多算法套路可以訪問我的 LeetCode 題解倉庫:<https://github.com/azl397985856/leetcode> 。 目前已經 37K star 啦。 大家也可以關注我的公眾號《力扣加加》帶你啃下算法這塊硬骨頭。 ![](https://img.kancloud.cn/cf/0f/cf0fc0dd21e94b443dd8bca6cc15b34b_900x500.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看