這道題是一道貪心算法題,如果前兩個數(shù)是遞增,則后面要遞減,如果不符合則往后遍歷,直到找到符合的。(完整題目附在了最后)
代碼如下:
class Solution(object):
def wiggleMaxLength(self, nums):
n = len(nums)
if n < 2:
return n
prevdiff = nums[1] - nums[0]
if prevdiff == 0:
n_subseq = 1
else:
n_subseq = 2
for i in range(2, n):
diff = nums[i] - nums[i - 1]
if (prevdiff >= 0 and diff < 0) or (prevdiff <= 0 and diff > 0):
prevdiff = diff
n_subseq += 1
return n_subseq
完整題目:
376.?擺動序列
如果連續(xù)數(shù)字之間的差嚴(yán)格地在正數(shù)和負(fù)數(shù)之間交替,則數(shù)字序列稱為?擺動序列 。第一個差(如果存在的話)可能是正數(shù)或負(fù)數(shù)。僅有一個元素或者含兩個不等元素的序列也視作擺動序列。
-
例如,?
[1, 7, 4, 9, 2, 5]
?是一個?擺動序列?,因為差值?(6, -3, 5, -7, 3)
?是正負(fù)交替出現(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:文章來源:http://www.zghlxwxcb.cn/news/detail-728361.html
輸入:nums = [1,2,3,4,5,6,7,8,9] 輸出:2
提示:文章來源地址http://www.zghlxwxcb.cn/news/detail-728361.html
1 <= nums.length <= 1000
0 <= nums[i] <= 1000
到了這里,關(guān)于算法題:擺動序列(貪心算法解決序列問題)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!