Leetcode 978 最長湍流子陣列

2022-03-27 00:08:57 字數 1545 閱讀 6597

當 a 的子陣列 a[i], a[i+1], ..., a[j] 滿足下列條件時,我們稱其為湍流子陣列:

若 i <= k < j,當 k 為奇數時, a[k] > a[k+1],且當 k 為偶數時,a[k] < a[k+1];

或 若 i <= k < j,當 k 為偶數時,a[k] > a[k+1] ,且當 k 為奇數時, a[k] < a[k+1]。

也就是說,如果比較符號在子陣列中的每個相鄰元素對之間翻轉,則該子陣列是湍流子陣列。

返回 a 的最大湍流子陣列的長度。

示例 1:

輸入:[9,4,2,10,7,8,8,1,9]

輸出:5

解釋:(a[1] > a[2] < a[3] > a[4] < a[5])

示例 2:

輸入:[4,8,12,16]

輸出:2

示例 3:

輸入:[100]

輸出:1

class solution else

ret = math.max(ret,right - left + 1);

}return ret;

}}

/*

* 狀態定義:

* increased[i]:以 arr[i] 結尾,並且 arr[i - 1] < arr[i] 的湍流子陣列的長度;

* decreased[i]:以 arr[i] 結尾,並且 arr[i - 1] > arr[i] 的湍流子陣列的長度。

** 狀態轉移方程:

* increased[i] = decreased[i - 1] + 1 if arr[i - 1] < arr[i] for i > 0;

* decreased[i] = increased[i - 1] + 1 if arr[i - 1] > arr[i] for i > 0。

** 初始化:只有乙個元素的時候,湍流子陣列的長度是 11;

* 輸出:兩個狀態陣列所有元素的最大值是最長湍流子陣列的長度;

* */

class solution else if(arr[i - 1] > arr[i])else

res = math.max(res,math.max(increased[i],decreased[i]));

}return res;

}}

class solution else if(arr[i] > arr[i - 1])else

res = math.max(res,math.max(dp[i][0],dp[i][1]));

}return res;

}}

class solution else if(arr[i] < arr[i -1])else

res = math.max(res,math.max(increased,decreased));

}return res;

}}

Leetcode 978 最長湍流子陣列

當a的子陣列a i a i 1 a j 滿足下列條件時,我們稱其為湍流子陣列 也就是說,如果比較符號在子陣列的相鄰元素對之間反轉,則子陣列是湍流子陣列。返回a的最大湍流子陣列的長度。示例1 輸入 9,4,2,10,7,8,8,1,9 輸出 5 解釋 a 1 a 2 a 3 a 4 a 5 本題最容易...

leetcode 978 最長湍流子陣列

陣列 dp 當a的子陣列a i a i 1 a j 滿足下列條件時,我們稱其為湍流子陣列 也就是說,如果比較符號在子陣列中的每個相鄰元素對之間翻轉,則該子陣列是湍流子陣列。返回a的最大湍流子陣列的長度。示例 1 輸入 9,4,2,10,7,8,8,1,9 輸出 5解釋 a 1 a 2 a 3 a 4...

leetcode978 最長湍流子陣列

當 a 的子陣列 a i a i 1 a j 滿足下列條件時,我們稱其為湍流子陣列 若 i k j,當 k 為奇數時,a k a k 1 且當 k 為偶數時,a k a k 1 或 若 i k j,當 k 為偶數時,a k a k 1 且當 k 為奇數時,a k a k 1 也就是說,如果比較符號在...