<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實戰(zhàn)376:擺動序列

          共 5700字,需瀏覽 12分鐘

           ·

          2021-09-13 16:03

          算法的重要性,我就不多說了吧,想去大廠,就必須要經(jīng)過基礎(chǔ)知識和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個公眾號后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做 擺動序列,我們先來看題面:
          https://leetcode-cn.com/problems/wiggle-subsequence/


          如果連續(xù)數(shù)字之間的差嚴格地在正數(shù)和負數(shù)之間交替,則數(shù)字序列稱為 擺動序列 。第一個差(如果存在的話)可能是正數(shù)或負數(shù)。僅有一個元素或者含兩個不等元素的序列也視作擺動序列。

          例如, [1, 7, 4, 9, 2, 5] 是一個 擺動序列 ,因為差值 (6, -3, 5, -7, 3) 是正負交替出現(xiàn)的。

          相反,[1, 4, 7, 2, 5] 和 [1, 7, 4, 5, 5] 不是擺動序列,第一個序列是因為它的前兩個差值都是正數(shù),第二個序列是因為它的最后一個差值為零。
          子序列 可以通過從原始序列中刪除一些(也可以不刪除)元素來獲得,剩下的元素保持其原始順序。

          給你一個整數(shù)數(shù)組 nums ,返回 nums 中作為 擺動序列 的 最長子序列的長度 。

          示例

          示例 1:

          輸入:nums = [1,7,4,9,2,5]
          輸出:6
          解釋:整個序列均為擺動序列,各元素之間的差值為 (6, -3, 5, -7, 3) 。

          示例 2:

          輸入:nums = [1,17,5,10,13,15,10,5,16,8]
          輸出:7
          解釋:這個序列包含幾個長度為 7 擺動序列。
          其中一個是 [1, 17, 10, 13, 10, 16, 8] ,各元素之間的差值為 (16, -7, 3, -3, 6, -8) 。

          示例 3:

          輸入:nums = [1,2,3,4,5,6,7,8,9]
          輸出:2


          解題

          https://www.pianshen.com/article/5030383529/

          解題思路:當(dāng)序列有一段連續(xù)的遞增或遞減時,為形成搖擺子序列,我們只需要保留這段連續(xù)的遞增(或遞減)的首尾元素,這樣更有可能使得搖擺的更劇烈。

          我們可以看到是有開始,遞增,遞減的狀態(tài)改變的,開始的時候長度至少為一,每改變一次狀態(tài)就會把搖擺序列的最長子序列的長度加一。由于有狀態(tài)改變,所以決定用向量機。

          下面是狀態(tài)轉(zhuǎn)移圖:


          class Solution {
          public:
              int wiggleMaxLength(vector<int>& nums) {
                  if (nums.size()<2){
                      return nums.size();//序列個數(shù)小于2是,直接為搖擺序列
                  }
                  const  int start=0; //序列的三種狀態(tài)
                  const  int up=1;
                  const  int down=2;
                  int state=0;
                  int count=1; //序列的最大長度至少為1
                  int i=1; //從第二個元素開始掃描
                  while (i<nums.size()){
                      switch(state){
                          case  start:
                              if (nums[i]>nums[i-1]){
                                  count++;
                                  state=up;
                              }else if(nums[i]<nums[i-1]){
                                  count++;
                                  state=down;
                              }
                              break;
                          case  up:
                              if (nums[i]<nums[i-1]){
                                  count++;
                                  state=down;
                              }
                              break;
                          case down:
                              if(nums[i]>nums[i-1]){
                                  count++;
                                  state=up;
                              }
                              break;
                      }
                      i++;
                  }
                  return count;
               }
          };


          好了,今天的文章就到這里,如果覺得有所收獲,請順手點個在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動力 。

          上期推文:

          LeetCode1-360題匯總,希望對你有點幫助!

          LeetCode刷題實戰(zhàn)361:轟炸敵人

          LeetCode刷題實戰(zhàn)362:敲擊計數(shù)器

          LeetCode刷題實戰(zhàn)363:矩形區(qū)域不超過 K 的最大數(shù)值和
          LeetCode刷題實戰(zhàn)364:加權(quán)嵌套序列和 II
          LeetCode刷題實戰(zhàn)365:水壺問題
          LeetCode刷題實戰(zhàn)366:尋找二叉樹的葉子節(jié)點
          LeetCode刷題實戰(zhàn)367:有效的完全平方數(shù)
          LeetCode刷題實戰(zhàn)368:最大整除子集數(shù)
          LeetCode刷題實戰(zhàn)369:給單鏈表加一
          LeetCode刷題實戰(zhàn)370:區(qū)間加法
          LeetCode刷題實戰(zhàn)371:兩整數(shù)之和
          LeetCode刷題實戰(zhàn)372:超級次方
          LeetCode刷題實戰(zhàn)373:查找和最小的K對數(shù)字
          LeetCode刷題實戰(zhàn)374:猜數(shù)字大小
          LeetCode刷題實戰(zhàn)375:猜數(shù)字大小 II

          瀏覽 36
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产精品乱码一区二区三区 | 成人国产精品秘 久久久 | 国产精品九九九九。。。 | 看的片a黄 | 五月婷婷综合网 |