問題:https://leetcode.com/contest/weekly-contest-148/problems/decrease-elements-to-make-array-zigzag/
貪欲なタイトル。二つの可能なジグザグがあり、最大値インデックスが偶数のインデックスが最大である、奇数です。可能な最小数の減少は、それぞれ、これらの2つの場合で計算します。
1 - [I]> = [I-1]、あなたがしたい場合は、[I] <[I-1]、そのような[I] =という[I-1]の場合。
以下は、そこに合理化することができる競技、中のコードです:
(この質問は簡単にメディアになってどのように突然、それを起動していません)
クラス解決{ パブリック: INT movesToMakeZigzag(ベクトル< INT >&NUMS){ int型 oddMax = 0 。 ベクター < INT > oddNums(NUMS)。 以下のために(int型 i = 1 ; iはoddNums.size()<; I ++のを) { 場合(I%2 ) { 場合(oddNums [I] <= oddNums [I - 1 ]) { oddMax + =(oddNums [I - 1 ] - oddNums [I])+ 1; oddNums [I - 1 ] = oddNums [I] - 1 。 } } 他 { 場合(oddNums [I]> = oddNums [I - 1 ]) { oddMax + =(oddNums [I] - oddNums [I - 1 ])+ 1 。 oddNums [I] = oddNums [I - 1 ] - 1 。 } } } int型 evenMax = 0 。 ベクトル < int型> evenNums(NUMS)。 以下のために(int型 i = 1 ; iは<evenNums.size(); iは++を) { 場合(I%2 ) { 場合(evenNums [I]> = evenNums [I - 1 ]) { evenMax + =(evenNums [I] - evenNums [I - 1 ])+ 1 。 evenNums [I] = evenNums [I - 1 ] - 1 。 } } 他 { 場合(evenNums [I] <= evenNums [I -1 ]) { evenMax + =(evenNums [I - 1 ] - evenNums [I])+ 1 。 evenNums [I - 1 ] = evenNums [I] - 1 。 } } } // coutの<< oddMax << "" << evenMax <<てendl; 戻り分(oddMax、evenMax)。 } }。