void AbstractGraphicsItem::resize( qint64 newSize, qint64 newMovingBoundary, qint64 currentStillBoundary, From from ) { if ( newSize < 1 ) { // if ( from == END ) // setStartPos( currentStillBoundary - 1 ); // setWidth( 1 ); return ; } qint64 maxSize = maxEnd() - maxBegin(); //The "from" actually stands for the clip bound that stays still. if ( from == BEGINNING ) { if ( hasResizeBoundaries() == true ) { qint64 beginOffset = begin() - maxBegin(); qint64 absoluteStartPos = currentStillBoundary - beginOffset; if ( absoluteStartPos + maxSize < newMovingBoundary ) { setWidth( maxSize - beginOffset ); return ; } } setWidth( newSize ); } else { if ( newMovingBoundary < 0 ) return ; if ( hasResizeBoundaries() == true ) { qint64 endOffset = maxEnd() - end(); qint64 absoluteEnd = currentStillBoundary + endOffset; if ( newMovingBoundary < absoluteEnd - maxSize ) { // qint64 size = end() - begin(); // setWidth( size ); // setStartPos( currentStillBoundary - size ); return ; } } setWidth( newSize ); setStartPos( newMovingBoundary ); } }
int wiggleMaxLength(vector<int>& nums) { if (nums.empty()) return 0; int n = nums.size(); vector<int> maxEnd(n, 1), minEnd(n, 1); for (int i = 1; i < nums.size(); i++) { for (int j = i - 1; j >= 0; j--) { if (nums[i] > nums[j] && minEnd[j] + 1 > maxEnd[i]) { maxEnd[i] = minEnd[j] + 1; } if (nums[i] < nums[j] && maxEnd[j] + 1 > minEnd[i]) { minEnd[i] = maxEnd[j] + 1; } } } return maxEnd[n-1] > minEnd[n-1]? maxEnd[n-1] : minEnd[n-1]; }