376. Wiggle Subsequence 类别:动态规划 难度:medium
2017-01-08 22:24
585 查看
题目:
A sequence of numbers is called a wiggle sequence if the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A
sequence with fewer than two elements is trivially a wiggle sequence.
For example,
are alternately positive and negative. In contrast,
not wiggle sequences, the first because its first two differences are positive and the second because its last difference is zero.
Given a sequence of integers, return the length of the longest subsequence that is a wiggle sequence. A subsequence is obtained by deleting some number of elements (eventually, also zero) from the original sequence, leaving the remaining elements in their original
order.
Examples:
程序:
class Solution {
public:
int wiggleMaxLength(
4000
vector<int>& nums) {
if(nums.size() == 0)
return 0;
if(nums.size() == 1)
return 1;
vector<int> diff;
for(int i = 1;i < nums.size();i++)
diff.push_back(nums[i] - nums[i - 1]);
vector<int> dp(diff.size(),0);
for(int i = 0;i < diff.size();i++)
{
if(diff[i] > 0)
{
dp[i] = 1;
for(int j = 0;j < i;j++)
{
if(diff[j] < 0)
dp[i] = max(dp[i],1 + dp[j]);
}
}
else if(diff[i] < 0)
{
dp[i] = 1;
for(int j = 0;j < i;j++)
{
if(diff[j] > 0)
dp[i] = max(dp[i],1 + dp[j]);
}
}
}
return dp[dp.size() - 1] + 1;
}
};
A sequence of numbers is called a wiggle sequence if the differences between successive numbers strictly alternate between positive and negative. The first difference (if one exists) may be either positive or negative. A
sequence with fewer than two elements is trivially a wiggle sequence.
For example,
[1,7,4,9,2,5]is a wiggle sequence because the differences (6,-3,5,-7,3)
are alternately positive and negative. In contrast,
[1,4,7,2,5]and
[1,7,4,5,5]are
not wiggle sequences, the first because its first two differences are positive and the second because its last difference is zero.
Given a sequence of integers, return the length of the longest subsequence that is a wiggle sequence. A subsequence is obtained by deleting some number of elements (eventually, also zero) from the original sequence, leaving the remaining elements in their original
order.
Examples:
Input: [1,7,4,9,2,5] Output: 6 The entire sequence is a wiggle sequence. Input: [1,17,5,10,13,15,10,5,16,8] Output: 7 There are several subsequences that achieve this length. One is [1,17,10,13,10,16,8]. Input: [1,2,3,4,5,6,7,8,9] Output: 2
程序:
class Solution {
public:
int wiggleMaxLength(
4000
vector<int>& nums) {
if(nums.size() == 0)
return 0;
if(nums.size() == 1)
return 1;
vector<int> diff;
for(int i = 1;i < nums.size();i++)
diff.push_back(nums[i] - nums[i - 1]);
vector<int> dp(diff.size(),0);
for(int i = 0;i < diff.size();i++)
{
if(diff[i] > 0)
{
dp[i] = 1;
for(int j = 0;j < i;j++)
{
if(diff[j] < 0)
dp[i] = max(dp[i],1 + dp[j]);
}
}
else if(diff[i] < 0)
{
dp[i] = 1;
for(int j = 0;j < i;j++)
{
if(diff[j] > 0)
dp[i] = max(dp[i],1 + dp[j]);
}
}
}
return dp[dp.size() - 1] + 1;
}
};
相关文章推荐
- 357. Count Numbers with Unique Digits 类别:动态规划 难度:medium
- 343. Integer Break 类别:动态规划 难度:medium
- 300. Longest Increasing Subsequence 类别:动态规划 难度:medium
- 62. Unique Paths 类别:动态规划 难度:medium
- 120. Triangle 类别:动态规划 难度:medium
- 413. Arithmetic Slices 类别:动态规划 难度:Medium
- 63. Unique Paths II 类别:动态规划 难度:medium
- 96. Unique Binary Search Trees 类别:动态规划 难度:medium
- 64. Minimum Path Sum 类别:动态规划 难度:medium
- 309. Best Time to Buy and Sell Stock with Cooldown 类别:动态规划 难度:medium
- 121. Best Time to Buy and Sell Stock 类别:动态规划 难度:easy
- 70. Climbing Stairs 类别:动态规划 难度:easy
- 198. House Robber 类别:动态规划 难度:easy
- 55. Jump Game 类别:贪心算法 难度:medium
- 134. Gas Station 类别:贪心算法 难度:medium
- 215. Kth Largest Element in an Array 难度:medium 类别:分治
- 207. Course Schedule 难度:medium 类别:图
- 241. Different Ways to Add Parentheses 难度:medium 类别:分治
- 210. Course Schedule II 难度:medium 类别:图
- 53. Maximum Subarray 难度:medium 类别:分治