classSolution{public:intwiggleMaxLength(vector<int>& nums){int n = nums.size();if(n <2){return n;}int pre = nums[1]- nums[0];int ret = pre ==0?1:2;for(int i =2; i < n;++i){int diff = nums[i]- nums[i-1];if((diff >0&& pre <=0)||(diff <0&& pre >=0)){pre = diff;++ret;}}return ret;}};
動態規劃 up[ i ] = 前i個元素最長的上升擺動序列(結尾為上升) down[ i ] = 前i個元素最長的下降擺動序列(結尾為下降)
classSolution{public:intwiggleMaxLength(vector<int>& nums){int n = nums.size();if(n <2){return n;}vector<int>up(n,0),down(n,0);up[0]= down[0]=1;for(int i =1; i < n;++i){if(nums[i]> nums[i-1]){up[i]=max(up[i-1], down[i-1]+1);down[i]= down[i-1];}elseif(nums[i]< nums[i-1]){up[i]= up[i-1];down[i]=max(down[i-1], up[i-1]+1);}else{up[i]= up[i-1];down[i]= down[i-1];}}returnmax(up[n-1], down[n-1]);}};classSolution{public:intwiggleMaxLength(vector<int>& nums){int n = nums.size();if(n <2){return n;}int up =1, down =1;for(int i =1; i < n;++i){if(nums[i]> nums[i-1]){up =max(up, down +1);}elseif(nums[i]< nums[i-1]){down =max(down, up +1);}}returnmax(up, down);}};與50位技術專家面對面20年技術見證,附贈技術全景圖