-
方法1:将两两差保存在另外一个vector<int>中,dp:
WeChat Image_20190106140515.jpg -
方法2:
WeChat Image_20190106140521.jpg
-
方法3:
WeChat Image_20190106140525.jpg -
code;
//int wiggleMaxLength(vector<int>& nums) {
// if (nums.size() <= 1)
// return nums.size();
// vector<int> dp;
// for (int i = 1; i < nums.size();i++) {
// if (nums[i] - nums[i - 1] == 0)
// continue;
// dp.push_back(nums[i] - nums[i - 1]);
// }
// if (dp.size() == 0)
// return 1;
// bool flag = (dp[0] > 0) ? true : false;
// vector<int> ans(dp.size(),1);
// for (int i = 1; i < dp.size(); i++) {
// if ((dp[i]>0&& flag==true) ||(dp[i]<0&& flag==false))//if true-->符号相同
// ans[i] = ans[i - 1];
// else
// ans[i] = ans[i-1] + 1;
// flag= (dp[i] > 0) ? true : false;
// }
//
// return ans.back() + 1;
//}
////其中p[i]表示到i位置时首差值为正的摆动子序列的最大长度,
////q[i]表示到i位置时首差值为负的摆动子序列的最大长度
//int wiggleMaxLength(vector<int>& nums) {
// if (nums.empty()) return 0;
// vector<int> p(nums.size(), 1);
// vector<int> q(nums.size(), 1);
// for (int i = 1; i < nums.size(); ++i) {
// for (int j = 0; j < i; ++j) {
// if (nums[i] > nums[j])
// p[i] = max(p[i], q[j] + 1);
// else if (nums[i] < nums[j])
// q[i] = max(q[i], p[j] + 1);
// }
// }
// return max(p.back(), q.back());
//}
//如果当前数字比前一个数字大,则p=q+1,
//如果比前一个数字小,则q=p+1,最后取p和q中的较大值跟n比较,取较小的那个
int wiggleMaxLength(vector<int>& nums) {
int p = 1, q = 1, n = nums.size();
for (int i = 1; i < n; ++i) {
if (nums[i] > nums[i - 1])
p = q + 1;
else if (nums[i] < nums[i - 1])
q = p + 1;
}
return min(n, max(p, q));
}
网友评论