日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

贪心---leetcode-376摆动序列

發布時間:2025/3/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 贪心---leetcode-376摆动序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第一個差(如果存在的話)可能是正數或負數。少于兩個元素的序列也是擺動序列。

例如, [1,7,4,9,2,5] 是一個擺動序列,因為差值 (6,-3,5,-7,3) 是正負交替出現的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是擺動序列,第一個序列是因為它的前兩個差值都是正數,第二個序列是因為它的最后一個差值為零。

給定一個整數序列,返回作為擺動序列的最長子序列的長度。 通過從原始序列中刪除一些(也可以不刪除)元素來獲得子序列,剩下的元素保持其原始順序。

示例 1:輸入: [1,7,4,9,2,5] 輸出: 6 解釋: 整個序列均為擺動序列。 示例 2:輸入: [1,17,5,10,13,15,10,5,16,8] 輸出: 7 解釋: 這個序列包含幾個長度為 7 擺動序列,其中一個可為[1,17,10,13,10,16,8]。 示例 3:輸入: [1,2,3,4,5,6,7,8,9] 輸出: 2

題目的意思大概就是這段數組必須是起伏的。大概就是比如數組a[0]>a[1]那么a[1]<a[2],a[2]>a[3]

大概就是這樣。
然后我們一段數列就是如果不是搖擺序列我們就找他的最大子序列,如果不是搖擺序列就代表著他是有一段遞增或者是遞減的序列。如圖所示

這段數組中 a[1]-a[5]以及a[8]-a[10]都是遞減的,a[5]-a[8]是遞增的這明顯不是擺動序列,所以我們可以找他的最大擺動子序列。按照貪心的原則我們肯定在遞減序列中找最小的,在遞增序列中找最大的,這樣在轉折點就是可以與下一個數字組成搖擺序列。比如該圖中,我們肯定選取轉折點。

現在我們來看看代碼

class Solution {public int wiggleMaxLength(int[] nums) {if(nums.length<2){return nums.length;}/**總共有兩種狀態 上升和下降。我們需要的擺動序列就是上升和下降這兩種狀態交替進行。**/final int up=1;/**switch中 case中使用的必須是常量 使用變量需要用final修飾**/final int down=2;final int start=0;int a=start;int maxlength=1;//最大擺動序列初始為1for(int i=1;i<nums.length;i++){switch(a){case start:if(nums[i-1]<nums[i]){a=up;maxlength++;}else if(nums[i-1]>nums[i]){a=down;maxlength++;}break;case up:if(nums[i-1]>nums[i]){a=down;maxlength++;}break;case down:if(nums[i-1]<nums[i]){a=up;maxlength++;}break;}}return maxlength;} }

在搖擺序列中,有兩種狀態向上(遞增)或者向下(遞減),我們分別用up和down表示。我們需要知道第一個狀態是什么所以設置了一個start,一開始switch里的變量就是start,然后通過case start中的代碼nums[i]與nums[i-1]的大小來判斷當前的狀態然后讓switch的下一個去尋找該狀態的代碼,總體的思路大致是這樣。今天也是我正式的去了解貪心算法所以記錄一下自己的思路。在做這道題目的時候我也卡了一下,原因是在于switch中case中使用的必須是常量(java中得在變量前使用final表示),而我忘記了這個基礎語法知識一直卡在編譯那邊,通過這道題目更加的發現自己的無知與粗細。

總結

以上是生活随笔為你收集整理的贪心---leetcode-376摆动序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。