DP问题,两次AC,第一次问题还是出现在初始情况的判断上面。 DP方程为:
if(nums[i]<nums[j]) dpUp[i]=max(dpUp[i],1+dpDown[j]); else if(nums[i]>nums[j]) dpDown[i]=max(dpDown[i],1+dpUp[j]);最终AC代码
class Solution { public: int wiggleMaxLength(vector<int>& nums) { if(nums.size()<=1) return nums.size(); int maxLength=0; vector<int> dpUp(nums.size(),1); vector<int> dpDown(nums.size(),1); for(int i=nums.size()-2;i>=0;i--) { for(int j=i+1;j<nums.size();j++) { if(nums[i]<nums[j]) dpUp[i]=max(dpUp[i],1+dpDown[j]); else if(nums[i]>nums[j]) dpDown[i]=max(dpDown[i],1+dpUp[j]); else{} } maxLength=max(maxLength,dpUp[i]); maxLength=max(maxLength,dpDown[i]); } return maxLength; } };