资讯详情

算法日常・每日刷题--<动态规划>24

📅 2026/10/14 18:51:40 | 华诺云谱 👁 阅读
算法日常・每日刷题--<动态规划>24
978. 最长湍流子数组 - 力扣LeetCode题目描述当一个子数组满足下面条件之一时我们称它为湍流子数组对于索引i当i是奇数arr[i] arr[i-1]当i是偶数arr[i] arr[i-1]或者对于索引i当i是奇数arr[i] arr[i-1]当i是偶数arr[i] arr[i-1]简单一句话相邻元素大小交替像波浪一样起伏不能连续上升也不能连续下降。 给定数组arr返回最长湍流子数组的长度。解法DP 数组定义fx[i]以arr[i]结尾最后一步是 arr [i] arr [i-1]下降的湍流子数组最大长度gx[i]以arr[i]结尾最后一步是 arr [i] arr [i-1]上升的湍流子数组最大长度湍流的特点上升后面必须接下降下降后面必须接上升交替出现。状态转移arr[i] arr[i-1]当前上升当前上升上一步必须是下降才能构成湍流gx[i] fx[i-1] 1fx[i] 1不能以下降结尾重置为 1代表只有自己arr[i] arr[i-1]当前下降当前下降上一步必须是上升才能构成湍流fx[i] gx[i-1] 1gx[i] 1arr[i] arr[i-1]相等湍流断裂上升、下降都无法延续fx[i] 1gx[i] 1子数组只能包含自身class Solution { public: int maxTurbulenceSize(vectorint arr) { int narr.size(); vectorintfx(n,0); vectorintgx(n,0); if(n1)return 1; if(n2arr[0]!arr[1])return 2; if(n2arr[0]arr[1])return 1; fx[0]1;fx[1]arr[0]arr[1]?2:1; gx[0]1;gx[1]arr[0]arr[1]?2:1; int ret1; for(int i2;in;i) { if(arr[i]arr[i-1]) { fx[i]1; gx[i]fx[i-1]1; } else if(arr[i]arr[i-1]) { gx[i]1; fx[i]gx[i-1]1; } else{ gx[i]fx[i]1; } int maxsizemax(fx[i],gx[i]); retretmaxsize?ret:maxsize; } return ret; } };
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑