<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、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 1218. 最長定差子序列 ## 題目地址(1218. 最長定差子序列) <https://leetcode-cn.com/problems/longest-arithmetic-subsequence-of-given-difference/> ## 題目描述 ``` <pre class="calibre18">``` 給你一個整數數組 arr 和一個整數 difference,請你找出 arr 中所有相鄰元素之間的差等于給定 difference 的等差子序列,并返回其中最長的等差子序列的長度。 示例 1: 輸入:arr = [1,2,3,4], difference = 1 輸出:4 解釋:最長的等差子序列是 [1,2,3,4]。 示例 2: 輸入:arr = [1,3,5,7], difference = 1 輸出:1 解釋:最長的等差子序列是任意單個元素。 示例 3: 輸入:arr = [1,5,7,8,5,3,4,2,1], difference = -2 輸出:4 解釋:最長的等差子序列是 [7,5,3,1]。 提示: 1 <= arr.length <= 10^5 -10^4 <= arr[i], difference <= 10^4 ``` ``` ## 前置知識 - 數組 - 動態規劃 ## 公司 - 騰訊 ## 思路 最直觀的思路是雙層循環,我們暴力的枚舉出以每一個元素為開始元素,以最后元素結尾的的所有情況。很明顯這是所有的情況,這就是暴力法的精髓, 很明顯這種解法會 TLE(超時),不過我們先來看一下代碼,順著這個思維繼續思考。 ### 暴力法 ``` <pre class="calibre18">``` <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">longestSubsequence</span><span class="hljs-params">(self, arr: List[int], difference: int)</span> -> int:</span> n = len(arr) res = <span class="hljs-params">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(n): count = <span class="hljs-params">1</span> <span class="hljs-keyword">for</span> j <span class="hljs-keyword">in</span> range(i + <span class="hljs-params">1</span>, n): <span class="hljs-keyword">if</span> arr[i] + difference * count == arr[j]: count += <span class="hljs-params">1</span> <span class="hljs-keyword">if</span> count > res: res = count <span class="hljs-keyword">return</span> res ``` ``` **復雜度分析** - 時間復雜度:O(N2)O(N^2)O(N2) - 空間復雜度:O(N)O(N)O(N) ### 動態規劃 上面的時間復雜度是 O(n^2), 有沒有辦法降低到 O(n)呢?很容易想到的是空間換時間的解決方案。 我的想法是將`以每一個元素結尾的最長等差子序列的長度`統統存起來,即`dp[num] = maxLen` 這樣我們遍歷到一個新的元素的時候,就去之前的存儲中去找`dp[num - difference]`, 如果找到了,就更新當前的`dp[num] = dp[num - difference] + 1`, 否則就是不進行操作(還是默認值 1)。 這種空間換時間的做法的時間和空間復雜度都是 O(n)。 ## 關鍵點解析 - 將`以每一個元素結尾的最長等差子序列的長度`統統存起來 ## 代碼 ``` <pre class="calibre18">``` <span class="hljs-title">#</span> <span class="hljs-title"># @lc app=leetcode.cn id=1218 lang=python3</span> <span class="hljs-title">#</span> <span class="hljs-title"># [1218] 最長定差子序列</span> <span class="hljs-title">#</span> <span class="hljs-title"># @lc code=start</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Solution</span>:</span> <span class="hljs-title"># 動態規劃</span> <span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">longestSubsequence</span><span class="hljs-params">(self, arr: List[int], difference: int)</span> -> int:</span> n = len(arr) res = <span class="hljs-params">1</span> dp = {} <span class="hljs-keyword">for</span> num <span class="hljs-keyword">in</span> arr: dp[num] = <span class="hljs-params">1</span> <span class="hljs-keyword">if</span> num - difference <span class="hljs-keyword">in</span> dp: dp[num] = dp[num - difference] + <span class="hljs-params">1</span> <span class="hljs-keyword">return</span> max(dp.values()) <span class="hljs-title"># @lc code=end</span> ``` ``` **復雜度分析** - 時間復雜度: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>

                              哎呀哎呀视频在线观看