给定一个整数数组 `nums`,找到其中最长的摆动子序列的长度。摆动子序列是指序列中相邻元素的差值符号交替变化(即正负交替)。
贪心:估计出所有的波峰以及波谷的个数。
public class Solution {
public int wigglemaxLengh(int[] nums)
{
//这是一个公关方法,接受一个整数数组作为参数,并返回一个整数。该方法用于计算数组中最长摆动子序列的长长度
int n= nums.length;//获取数组长度
if(n<2)return n;//长度为1或0本身就是摆动序列
int ret =0,left=0;
for(int i=0;i<n-1;i++)//
{
int right=nums[i+1]-nums[i];//计算当前元素与下一个元素的差值
if(right==0) continue;//如果值为0,跳过当前循环,因为摆动序列的差值不能为0
if(left*right<=0)ret++;//如果当前差值与上一个差值的乘积小于0,说明摆动方向发生了变化,增加摆动序列的长度
left=right;
}
return ret+1;
}
public static void main(String[] args) {
Solution solution=new Solution();
int[] nums ={1,7,4,9,2,5};
System.out.println(solution.wigglemaxLengh(nums));
}
}