class Solution {
public:
int wiggleMaxLength(vector<int>& nums) {
int sums = 0;
if (nums.size() == 1) return 1; //只有一个的话,就直接返回
if (nums.size() == 2) {//两个点的情况下,就有种可能一样的,所以需要排除一下
if (nums[0] == nums[1]) return 1;
else return 2;
};
int pre = 0; //指向前一个峰值点
vector<int> v;
for (int i = 1; i < nums.size() - 1; ++i) { //抛出首尾两端点
int t1 = nums[i] - nums[pre];
int t2 = nums[i + 1] - nums[i];
if (t1 * t2 < 0) { // 判断是不是震荡点,是的话就把pre 移到这个位置来
sums++; //峰值计数加1
v.push_back(nums[i]); //并把当前峰值存储起来
pre = i;
}
}
if (v.size() == 0) {//没峰值的情况是,要不全单调,或者相等,进行判断
for (int i = 1; i < nums.size(); ++i) {
if (nums[i] != nums[i - 1])
return 2;
}
return 1;
};
if (v.size() == 1) return 3; //只有一个峰值,要么就是凹要么就是凸
if (v.size() > 1) { //判断最后的那个点是否在震荡序列内
int lenth = v.size() - 1;
int t1 = v[lenth] - v[lenth - 1];
int t2 = nums[nums.size() - 1] - v[lenth];
if (t1 * t2 < 0) {
sums ++;
}
}
return sums+1; //加上初始的那个点
}
};
leetcode 376 摆动序列
最新推荐文章于 2024-09-14 18:52:56 发布
该代码解决了一个算法问题,即给定一个整数数组nums,找到其最大摆动序列长度。摆动序列是指序列中相邻元素之间的差值交替为正和负。如果序列长度为1或2,返回其长度;否则,通过计算和存储峰值,判断是否为摆动点来确定最大摆动序列长度。
摘要由CSDN通过智能技术生成