外贸购物网站建设杭州网站seo外包
376. 摆动序列
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
- _376摆动序列
- _376摆动序列
- 错误经验吸取
原题链接:
376. 摆动序列
https://leetcode.cn/problems/wiggle-subsequence/description/
完成情况:
解题思路:
//就是贪心,上升的时候,选取上升数中的较大值// 下降的时候,选取下降数中的较小值//然后因为是摆荡数列嘛,就是要开局确认一下是先递增,还是先递减
参考代码:
_376摆动序列
package 代码随想录.贪心算法;public class _376摆动序列 {/**** @param nums* @return*/public int wiggleMaxLength(int[] nums) {//就是贪心,上升的时候,选取上升数中的较大值// 下降的时候,选取下降数中的较小值//然后因为是摆荡数列嘛,就是要开局确认一下是先递增,还是先递减if (nums.length <= 1){return nums.length;}
// //看增减顺序
// boolean flag = true; //true增 ,false减//当前差值int curDiff = 0;//上一个差值int prevDiff = 0;
// int preA = nums[0];
// int preB = nums[1];
// if (preB - preA < 0){
// //先减
// flag = false;
// }
// int maxValue = preB;
// for (int i=2;i< nums.length;i++){
// if (flag = )
//
// }int count = 1;for (int i = 1; i < nums.length; i++){//得到当前差值curDiff = nums[i] - nums[i-1];//如果当前差值和上一个差值为一正一负//等于0的情况表示初始时的preDiffif ((curDiff > 0 && prevDiff <= 0) || (curDiff < 0 && prevDiff >= 0)){count++;prevDiff = curDiff;}}return count;}
}
_376摆动序列
package 代码随想录.动态规划;import java.util.Map;public class _376摆动序列 {/**** @param nums* @return*/public int wiggleMaxLength(int[] nums) {// 0 i 作为波峰的最大长度// 1 i 作为波谷的最大长度int dp[][] = new int[nums.length][2];dp[0][0] = dp[0][1] = 1;for (int i = 0; i < nums.length; i++){//i 自己可以成为波峰或者波谷dp[i][0] = dp[i][1] = 1;for (int j = 0; j < i; j++){if (nums[j] > nums[i]){//i是波谷dp[i][1] = Math.max(dp[i][1], dp[i][0] + 1);}if (nums[j]< nums[i]){//i是波峰dp[i][0] = Math.max(dp[i][0],dp[j][1] + 1);}}}return Math.max(dp[nums.length - 1][0],dp[nums.length-1][1]);}
}