Leetcode 978. 最长湍流子数组 (动态规划)

Leetcode 978. 最长湍流子数组 (动态规划)_第1张图片

 

这道题目如果用双指针的思路,边界会比较多,比较麻烦,建议采用动态规划

定义f[i]表示以i结尾的最长摆动序列,在转移的时候,显然有两种情况,分别对应上升和下降,因此想到定义两个状态,然后交替转移,可以用滚动数组将空间优化到O(1)

class Solution {
public:
    int maxTurbulenceSize(vector& arr) {
        // f[i] 表示以i结尾的上升的湍流数组
        // g[i] 表示以i结尾的下降的湍流数组
        int n = arr.size(), res = 1;
        vector f(n,1),g(n,1);
        for(int i=1;iarr[i-1]) f[i] = g[i-1] + 1;
            if(arr[i]

 

你可能感兴趣的:(算法)